环境: window10_x64 & vs2022
python版本: 3.9.13
日常开发中,会遇到c/c++作为客户端访问http/https服务的情况,今天整理下windows10环境下c/c++使用winhttp访问http/https服务的笔记,并提供相关资源下载。
我将从以下几个方面展开:
- http服务构建
- https证书生成及服务构建
- winhttp使用示例
- 资源下载
一、模拟http服务端
1、构建http服务
这里使用tornado来构建http服务。
示例代码(httpServer1.py):- #! /usr/bin/env python3
- #-*- coding:utf-8 -*-
- import tornado.ioloop
- import tornado.web
- import tornado.httpserver
- import json,time,datetime
- settings = {
- "debug" : False ,
- }
- def trace(reqType,reqBody):
- msg = str(datetime.datetime.now()) + " , [" + reqType + "] , " + str(reqBody)
- print(msg)
- class MainHandler(tornado.web.RequestHandler):
- def get(self):
- trace("get",self.request.arguments)
- #query = self.get_query_argument("query")
- #print("query : %s" % query)
- self.set_header('content-type', 'application/json')
- #self.write(json.dumps({"result" : "test message"}))
- self.finish(json.dumps({"result" : "get message"}))
- def put(self):
- trace("put",self.request.body)
- self.finish(json.dumps({"result" : "put message"}))
- def post(self):
- #trace("post",self.request.arguments)
- trace("post",self.request.body)
- self.set_header('Content-type', 'application/json')
- #self.set_header('Transfer-Encoding', 'chunked')
- self.finish(json.dumps({"result" : "post message %d" % time.time()}))
- if __name__ == "__main__":
- port = 8093
- print("listen on port %d"%port)
- application = tornado.web.Application([
- (r"/.*", MainHandler),
- ],**settings)
- application.listen(port)
- #http_server = tornado.httpserver.HTTPServer(application)
- #http_server.bind(port,"0.0.0.0")
- #http_server.start(num_processes=0)
- tornado.ioloop.IOLoop.instance().start()
复制代码 2、服务运行效果
curl测试命令如下:- curl -v http://127.0.0.1:8093 && echo ""
复制代码 运行效果如下:
二、模拟https服务端
构建https服务,需要使用证书,这里使用自签名证书来实现。
1、生成证书
生成自签名证书(genCertTest1.bat):
[code]goto startcat > openssl.cnf |