使用htps进行,Get请求和post请求
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请求相关推荐
- iOS开发网络篇—GET请求和POST请求
一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http ...
- mvc ajax get请求,springMVC 中 ajax get 请求和 post 请求的坑以及参数传递
1, ajax 请求 无论为 post ,或者 get ,url中带有?形式的参数,后台都能以String类型变量接收,变量名称和参数名称必须一致 前台ajax: $.ajax( "prod ...
- WEB中get请求和post请求的区别
参考:https://blog.csdn.net/weixin_39361808/article/details/81136865 GET请求和POST请求是HTTP协议发送请求的两种基本方法. W3 ...
- axios中出现两次请求,OPTIONS请求和GET请求
在项目中发现ajax中出现两次请求,OPTIONS请求和GET请求 查看到浏览器NetWork有两次请求,请求url一样: 查找原因是浏览器对简单跨域请求和复杂跨域请求的处理区别. XMLHttpRe ...
- JSP、Servlet中get请求和post请求的区别总结
在学习JavaWeb最初的开始阶段,大家都会遇到HttpServlet中的doGet和doPost方法.前两天看<Head First Servlets & JSP>看到其中讲关于 ...
- java中的post的作用,JSP、Servlet中get请求和post请求的区别总结
在学习JavaWeb最初的开始阶段,大家都会遇到HttpServlet中的doGet和doPost方法.前两天看<Head First Servlets & JSP>看到其中讲关于 ...
- 客户端(前端)Ajax中Get请求和Post请求的区别
我们在使用Ajax时,当我们向服务器发送数据时,我们可以采用Get方式请求服务器,也可以使用Post方式请求服务器.那么,Get请求和Post请求的区别到底在哪呢? GET请求 get是最常见的请 ...
- 傲娇大少之——【GET请求和POST请求】
若有来生,不婚不嫁,不孕不养,不做谁的妻,不为谁的娘. 只做自家女,养父母终老. 孑然一身,我行我素,随心所欲! ~诶,我好像不用等到来生... 关于http协议的get和post请求 get和pos ...
- get请求和post请求的区别(简洁易懂)
一.GET和POST是什么? HTTP协议中的两种发送请求的方法,本质上都是在进行TCP连接. 二. GET请求和POST请求的区别是什么? GET请求参数是通过URL进行传递的,POST请求的参数包 ...
- 接口定义,常见的接口,常见的接口请求方式,put请求和patch请求的区别
接口定义:应用程序编程接口,指前后端数据交互的一套标准,包括软件内部之间的接口,硬件之间的接口或者是软件对外的接口. 常见的接口类型: 1,Webservice接口,主要用于服务端的接 ...
最新文章
- C语言清空输入缓冲区的N种方法对比
- MINA系列学习-IoAccpetor
- 自己实现spring核心功能 二
- 从零开始学习jQuery (三) 管理jQuery包装集【转】
- hub设备_外设再多也不怕,ORICO 7口HUB测评
- app软件测试是否强制升级_这些测试方法对于任何软件都必须是强制性的
- 搬家请搬家公司好还是请朋友帮忙好?
- JavaScript 基础--- (正则表达式 / 事件监听与绑定)
- VS2010下配置 OpenCV2.2
- C语言中32个关键字详解
- 99%的人都能看懂的MQ补偿机制
- 恶意软件同源性方法研究
- 男生拍照姿势大全,这样拍才帅
- 【CTF WriteUp】UTCTF 2020部分题解
- 百行代码手撸扫雷(下)c/c++
- Vue提示 : Named Route ‘test‘ has a default child route. When navigating to this named route (:to=“{nam
- PyCharm格式02: Simplify chained comparison
- 纷享销客重磅发布中国CRM应用与选型案例集之《高科技现代企业服务》
- 第三方软件测试(软件检测)收费标准
- win7系统错误代码,以及解决的办法集锦
热门文章
- 关于安控RTU和宏电DTU的通讯设置
- mysql索引(七)唯一索引
- java婚纱摄影网站计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
- 评价指标MSE和AUC的参考文献
- 天翼对讲机写频软件_【对讲机的那点事】摩托罗拉GM950E/I 车载台如何编程?(上)...
- Pytorch之反向传播
- Python多行注释/取消注释快捷键
- c 语言实现链表反转(超详细,有手就行)
- 三菱5uplc伺服电机指令_2020山东三菱PLCFX1S30MT回收回收价格公道
- 网络扫描及安全评估实验实验报告