C++使用socket往http地址发送数据

C++使用socket往http地址发送数据

2017-08-21 09:31:39 zhz_workassb 阅读数 1019 收藏 更多
分类专栏: c++ php
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/workassb/article/details/77442921
//C++ POST方法 主体
int CDataBaseSink::request(char* hostname, char* api,DWORD port, char* parameters)
{
WSADATA WsaData;
WSAStartup(0x0101, &WsaData); //初始化socket
struct hostent* host_addr = gethostbyname(hostname);
if (host_addr == NULL)
{
CTraceService::TraceString(“host连接失败!”,TraceLevel_Warning);
return -103;
}
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons((unsigned short)port);
sin.sin_addr.s_addr = ((int)host_addr->h_addr_list);
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1)
{
return -100;
}
//建立连接
if (connect(sock, (const struct sockaddr )&sin, sizeof(sockaddr_in) ) == -1)
{
CTraceService::TraceString(“socket连接失败!”,TraceLevel_Warning);
return -101;
}
//初始化发送信息
char send_str[2048] = {0};
//头信息
strcat(send_str, "POST “);
strcat(send_str, api);
strcat(send_str, " HTTP/1.1\r\n”);
strcat(send_str, "Host: ");
strcat(send_str, hostname);
strcat(send_str, “\r\n”);
strcat(send_str, “Connection: keep-alive\r\n”);
char content_header[100];
sprintf(content_header,“Content-Length: %d\r\n”, strlen(parameters));
strcat(send_str, content_header); strcat(send_str, “Cache-Control: max-age=0\r\n”);
strcat(send_str, “Origin: http://www.baidu.com\r\n”);
strcat(send_str, “User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/15.0.849.0 Safari/535.1\r\n”);
strcat(send_str, “Content-Type: application/x-www-form-urlencoded\r\n”);
strcat(send_str, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,
/
;q=0.8\r\n");
strcat(send_str, “Referer: http://www.baidu.com/\r\n”);
strcat(send_str, “Accept-Encoding: gzip,deflate,sdch\r\n”);
strcat(send_str, “Accept-Language: zh-CN,zh;q=0.8\r\n”);
//内容信息
strcat(send_str, “\r\n”);
strcat(send_str, parameters);
if (send(sock, send_str, strlen(send_str),0) == -1)
{
CTraceService::TraceString(“send失败!”,TraceLevel_Warning);
return -101;
}
//获取返回信息
char recv_str[4096] = {0};
if (recv(sock, recv_str, sizeof(recv_str), 0) == -1)
{
CTraceService::TraceString(“获取返回参数失败!”,TraceLevel_Warning);
return -101;
}
CTraceService::TraceString(recv_str,TraceLevel_Normal);
WSACleanup();
return 0;
}
调用实例:

//C++ POST方法
/参数:sParam :“receipt_data=zhz&b=2”;
HostIp:“0.0.0.0”
Port : 3306
ApiUrl:“http:ip:port/mothd/…”
/
std::string CDataBaseSink::HttpPostparams(TCHAR
HostIp,TCHAR
ApiUrl,DWORD Port,TCHAR* sParam)
{

Json::Value root;
Json::FastWriter writer;
CString parammsg;
int errcode = request(HostIp,ApiUrl,Port,sParam); 
parammsg.Format("(方法:HttpPostparams)Http-POST信息:errcode: '%d'; data: '%s'",errcode,sParam);
CTraceService::TraceString(parammsg,TraceLevel_Normal);

root["result_out"] =0;
return writer.write(root);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值