辗振 发表于 2025-7-10 17:44:18

C++使用WinHTTP访问http/https服务

环境: 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 -vhttp://127.0.0.1:8093 && echo ""运行效果如下:

 
二、模拟https服务端

构建https服务,需要使用证书,这里使用自签名证书来实现。
1、生成证书

生成自签名证书(genCertTest1.bat):
goto startcat > openssl.cnf
页: [1]
查看完整版本: C++使用WinHTTP访问http/https服务