1. 编译openssl, 生成lib 和dll,在本人资源中已经有各个版本的dll和lib

2.  Get 请求看

int getPages(const char* host_addr, const int host_port, const char* pObject)
{
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 0), &wsaData);
    
    SOCKET sockfd;
    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {
        DebugMsg("Socket Error: %s", strerror(errno));
        return -1;
    }
    
    struct sockaddr_in server_addr;
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(host_port);
    server_addr.sin_addr.s_addr = inet_addr(host_addr);
    
    if (connect(sockfd, (struct sockaddr *) (&server_addr), sizeof(struct sockaddr)) == -1)
    {
        DebugMsg("Connect Error:%s", strerror(errno));
        return -1;
    }
    
    SSL *ssl;
    SSL_CTX *ctx;
    // SSL initialize
    SSL_library_init();
    SSL_load_error_strings();
    ctx = SSL_CTX_new(SSLv23_client_method());
    if (ctx == NULL)
    {
        DebugMsg("SSL CTX new failed!");
        return -1;
    }
    
    ssl = SSL_new(ctx);
    if (ssl == NULL)
    {
        DebugMsg("SSL new failed!");
        return -1;
    }
    
    // link socket & SSL
    int ret = SSL_set_fd(ssl, sockfd);
    if (ret == 0)
    {
        DebugMsg("SSL link socket failed!");
        return -1;
    }
    
    RAND_poll();
    while (RAND_status() == 0)
    {
        unsigned short rand_ret = rand() % 65536;
        RAND_seed(&rand_ret, sizeof(rand_ret));
    }
    
    // SSL connect
    ret = SSL_connect(ssl);
    if (ret != 1)
    {
        DebugMsg("SSL connect failed!");
        return -1;
    }
    
    char getRequest[1024];
    sprintf(getRequest, "GET %s HTTP/1.0\r\nHost: %s\r\n\r\n\r\n", pObject, "10.18.4.80");
    
    // send https request
    int totalsend = 0;
    int requestLen = strlen(getRequest);
    while (totalsend < requestLen)
    {
        int send = SSL_write(ssl, getRequest + totalsend, requestLen - totalsend);
        if (send == -1)
        {
            DebugMsg("SSL send failed!");
        }
        totalsend += send;
        DebugMsg("%d bytes send OK!", totalsend);
    }
    
    // receive https response
    int responseLen = 0;
    int i = 0;
    char buffer[8];
    memset(buffer, 0, 8);
    char returnBuffer[1024];
    memset(returnBuffer, 0, 1024);
    int p = 0;
    while ((responseLen = SSL_read(ssl, buffer, 1)) == 1 && p<1024)
    {
        returnBuffer[p] = buffer[0];
        p++;
        if (i < 4)
        {
            if (buffer[0] == '\r' || buffer[0] == '\n')
                i++;
            else
                i = 0;
        }
    }
    
    DebugMsg("%s", returnBuffer);
    
    // shutdown community 
    ret = SSL_shutdown(ssl);
    if (ret != 1)
    {
        DebugMsg("SSL shutdown failed!");
        return -1;
    }
    SSL_free(ssl);
    SSL_CTX_free(ctx);
    ERR_free_strings();
    closesocket(sockfd);
    WSACleanup();
    return 0;
}

一定要注意: http的请求 head部分 跟 body部分  一定要有  \r\n\r\n

一定要注意, 改成post请求 需要改动的部分就是head的部分信息,还需要有Content-length字段。  post过去的数据一定是在 \r\n\r\n之后。切记

3. 看看我个 https post请求

NETAPI size_t MzHttpRequestRefundByHttps(char *szIpAddr, short wPort, char *szAccessKey, const char *szTimeStamp, const char *szToken, char *szSendBuf, char *szRecvBuf)
{
    char szOutBuffer[HTTP_RECV_SIZE] = { 0 };
    string strRequest;
    strRequest += "POST /order/refund HTTP/1.1";
    strRequest += "\r\n";
    strRequest +="Accept-Language:zh-CN,zh;q=0.8";
    strRequest +="\r\n";
    strRequest +="Accept-Encoding:gzip, deflate";
    strRequest +="\r\n";
    strRequest +="Accept:*/*";
    strRequest +="\r\n";
    strRequest +="Content-Type:application/x-www-form-urlencoded";
    strRequest += "\r\n";
    strRequest += "accessKey:" ;//ab488d3ef5b44d73a9365dfeac78fab0b3fbfe56";
    strRequest += szAccessKey;
    strRequest += "\r\n";
    strRequest += "timestamp:";//1453926259343";
    strRequest += szTimeStamp;
    strRequest += "\r\n";
    strRequest +="token:";//BE27989F5E198DB0B78A0A05F2611F0D9965B3D7";
    strRequest += szToken;
    strRequest += "\r\n";
    strRequest +="Host:";//172.19.24.230:9092";
    strRequest += szIpAddr;
    strRequest +=  "\r\n";
    strRequest += "Cache-Control:no-cache";
    strRequest += "\r\n";
    strRequest += "Content-Length:";
    
    //order/refund?device=PC&orderNum=10021014526921772292985&password=sdfsdaf
    string strBody(szSendBuf);
    size_t dwIndex = strBody.find("?");
    if (dwIndex == string::npos)
    {
        return 0;
    }
    strBody= strBody.substr(dwIndex+1);
    char szNumber[MAX_PATH] = {0};
    itoa(strBody.size(),szNumber,10);
    strRequest += szNumber;
    strRequest += "\r\n\r\n";
    strRequest += strBody;

{
        PostRequestToHttpsServer(szIpAddr,443,"order/refund",strRequest.c_str(),szOutBuffer);
    }
 
    return strJson.length();
}

使用htps进行,Get请求和post请求相关推荐

  1. iOS开发网络篇—GET请求和POST请求

      一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http ...

  2. mvc ajax get请求,springMVC 中 ajax get 请求和 post 请求的坑以及参数传递

    1, ajax 请求 无论为 post ,或者 get ,url中带有?形式的参数,后台都能以String类型变量接收,变量名称和参数名称必须一致 前台ajax: $.ajax( "prod ...

  3. WEB中get请求和post请求的区别

    参考:https://blog.csdn.net/weixin_39361808/article/details/81136865 GET请求和POST请求是HTTP协议发送请求的两种基本方法. W3 ...

  4. axios中出现两次请求,OPTIONS请求和GET请求

    在项目中发现ajax中出现两次请求,OPTIONS请求和GET请求 查看到浏览器NetWork有两次请求,请求url一样: 查找原因是浏览器对简单跨域请求和复杂跨域请求的处理区别. XMLHttpRe ...

  5. JSP、Servlet中get请求和post请求的区别总结

    在学习JavaWeb最初的开始阶段,大家都会遇到HttpServlet中的doGet和doPost方法.前两天看<Head First Servlets & JSP>看到其中讲关于 ...

  6. java中的post的作用,JSP、Servlet中get请求和post请求的区别总结

    在学习JavaWeb最初的开始阶段,大家都会遇到HttpServlet中的doGet和doPost方法.前两天看<Head First Servlets & JSP>看到其中讲关于 ...

  7. 客户端(前端)Ajax中Get请求和Post请求的区别

    我们在使用Ajax时,当我们向服务器发送数据时,我们可以采用Get方式请求服务器,也可以使用Post方式请求服务器.那么,Get请求和Post请求的区别到底在哪呢?  GET请求  get是最常见的请 ...

  8. 傲娇大少之——【GET请求和POST请求】

    若有来生,不婚不嫁,不孕不养,不做谁的妻,不为谁的娘. 只做自家女,养父母终老. 孑然一身,我行我素,随心所欲! ~诶,我好像不用等到来生... 关于http协议的get和post请求 get和pos ...

  9. get请求和post请求的区别(简洁易懂)

    一.GET和POST是什么? HTTP协议中的两种发送请求的方法,本质上都是在进行TCP连接. 二. GET请求和POST请求的区别是什么? GET请求参数是通过URL进行传递的,POST请求的参数包 ...

  10. 接口定义,常见的接口,常见的接口请求方式,put请求和patch请求的区别

    接口定义:应用程序编程接口,指前后端数据交互的一套标准,包括软件内部之间的接口,硬件之间的接口或者是软件对外的接口. 常见的接口类型:         1,Webservice接口,主要用于服务端的接 ...

最新文章

  1. C语言清空输入缓冲区的N种方法对比
  2. MINA系列学习-IoAccpetor
  3. 自己实现spring核心功能 二
  4. 从零开始学习jQuery (三) 管理jQuery包装集【转】
  5. hub设备_外设再多也不怕,ORICO 7口HUB测评
  6. app软件测试是否强制升级_这些测试方法对于任何软件都必须是强制性的
  7. 搬家请搬家公司好还是请朋友帮忙好?
  8. JavaScript 基础--- (正则表达式 / 事件监听与绑定)
  9. VS2010下配置 OpenCV2.2
  10. C语言中32个关键字详解
  11. 99%的人都能看懂的MQ补偿机制
  12. 恶意软件同源性方法研究
  13. 男生拍照姿势大全,这样拍才帅
  14. 【CTF WriteUp】UTCTF 2020部分题解
  15. 百行代码手撸扫雷(下)c/c++
  16. Vue提示 : Named Route ‘test‘ has a default child route. When navigating to this named route (:to=“{nam
  17. PyCharm格式02: Simplify chained comparison
  18. 纷享销客重磅发布中国CRM应用与选型案例集之《高科技现代企业服务》
  19. 第三方软件测试(软件检测)收费标准
  20. win7系统错误代码,以及解决的办法集锦

热门文章

  1. 关于安控RTU和宏电DTU的通讯设置
  2. mysql索引(七)唯一索引
  3. java婚纱摄影网站计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  4. 评价指标MSE和AUC的参考文献
  5. 天翼对讲机写频软件_【对讲机的那点事】摩托罗拉GM950E/I 车载台如何编程?(上)...
  6. Pytorch之反向传播
  7. Python多行注释/取消注释快捷键
  8. c 语言实现链表反转(超详细,有手就行)
  9. 三菱5uplc伺服电机指令_2020山东三菱PLCFX1S30MT回收回收价格公道
  10. 网络扫描及安全评估实验实验报告