找回密码
 立即注册
首页 业界区 业界 C++使用WinHTTP访问http/https服务

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

辗振 昨天 17:44
环境: 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):
  1. #! /usr/bin/env python3
  2. #-*- coding:utf-8 -*-
  3. import tornado.ioloop
  4. import tornado.web
  5. import tornado.httpserver
  6. import json,time,datetime
  7. settings = {
  8.     "debug" : False ,   
  9. }
  10. def trace(reqType,reqBody):
  11.     msg = str(datetime.datetime.now()) + " , [" + reqType + "] , " + str(reqBody)
  12.     print(msg)
  13. class MainHandler(tornado.web.RequestHandler):
  14.     def get(self):
  15.         trace("get",self.request.arguments)
  16.         #query = self.get_query_argument("query")
  17.         #print("query : %s" % query)
  18.         self.set_header('content-type', 'application/json')
  19.         #self.write(json.dumps({"result" : "test message"}))
  20.         self.finish(json.dumps({"result" : "get message"}))
  21.     def put(self):
  22.         trace("put",self.request.body)
  23.         self.finish(json.dumps({"result" : "put message"}))
  24.     def post(self):
  25.         #trace("post",self.request.arguments)
  26.         trace("post",self.request.body)
  27.         self.set_header('Content-type', 'application/json')
  28.         #self.set_header('Transfer-Encoding', 'chunked')
  29.         self.finish(json.dumps({"result" : "post message %d" % time.time()}))
  30. if __name__ == "__main__":
  31.     port = 8093
  32.     print("listen on port %d"%port)
  33.     application = tornado.web.Application([
  34.         (r"/.*", MainHandler),
  35.     ],**settings)
  36.     application.listen(port)
  37.     #http_server = tornado.httpserver.HTTPServer(application)
  38.     #http_server.bind(port,"0.0.0.0")
  39.     #http_server.start(num_processes=0)
  40.     tornado.ioloop.IOLoop.instance().start()
复制代码
2、服务运行效果

curl测试命令如下:
  1. curl -v  http://127.0.0.1:8093 && echo ""
复制代码
运行效果如下:
1.png

 
二、模拟https服务端

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

生成自签名证书(genCertTest1.bat):
[code]goto startcat > openssl.cnf
您需要登录后才可以回帖 登录 | 立即注册