使用htps进行,Get请求和post请求
来源:互联网 发布:nba勇士队格林数据 编辑:程序博客网 时间:2024/06/07 03:37
1. 编译openssl, 生成lib 和dll,在本人资源中已经有各个版本的dll和lib
2. Get 请求看
int getPages(constchar* 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(structsockaddr))== -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请求
{
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请求
- 使用HttpClient进行get和post请求
- 使用OC进行实现GET和POST请求
- JavaScript进行GET和POST请求
- JavaScript进行GET和POST请求
- get请求和post请求
- get请求和post请求
- GET请求和POST请求
- GET请求和POST请求
- GET请求和POST请求
- GET请求和POST请求
- GET请求和POST请求
- POST请求和GET请求
- get请求和post请求
- GET和POST请求
- Get和Post请求
- post和get请求
- Get和Post请求
- MySQL数据类型 int(M) 表示什么意思?
- 一个按钮提交两个Ajax请求
- Android学习路线指南
- ubuntu下权限设置问题
- SVN服务器介绍
- 使用htps进行,Get请求和post请求
- 如何在PLSQL中调试PACKAGE包中的FUNCTION函数
- Java迭代器Iterator
- 谈谈python的GIL、多线程、多进程
- iOS 禁止横屏的解决方案
- navigator.userAgent.indexOf来判断浏览器类型
- hdoj5536Chip Factory
- Java中equals和==的区别
- jquery里的val()给对象重新复制