64,682
社区成员
发帖
与我相关
我的任务
分享
wchar_t* _post(char* hostname,char* url,char* para)
{
WSADATA wsa;
wchar_t* msg;
DWORD dwNum;
/*初始化socket资源*/
if (WSAStartup(MAKEWORD(1,1),&wsa) != 0)
{
dwNum = MultiByteToWideChar (CP_ACP, 0, "初始化失败", -1, NULL, 0);
msg = new wchar_t[dwNum];
MultiByteToWideChar (CP_ACP, 0, "初始化失败", -1, msg, dwNum);
return msg; //代表失败
}
//初始化socket
SOCKET Client_Sock = socket(AF_INET, SOCK_STREAM, 0);
struct hostent* host_addr = gethostbyname(hostname);
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons((unsigned short)80);
sin.sin_addr.s_addr = *((int*)*host_addr->h_addr_list);
int ret = connect(Client_Sock,(const struct sockaddr *)&sin,sizeof(sockaddr_in));
if(ret == -1)
{
dwNum = MultiByteToWideChar (CP_ACP, 0, "连接失败", -1, NULL, 0);
msg = new wchar_t[dwNum];
MultiByteToWideChar (CP_ACP, 0, "连接失败", -1, msg, dwNum);
return msg; //代表失败
}
//拼接请求信息
char send_str[2048] = {NULL};
strcat(send_str,"POST ");
strcat(send_str,url);
strcat(send_str," HTTP/1.1\r\n");
strcat(send_str,"Accept: */*\r\n");
strcat(send_str,"Accept-Language: zh-cn\r\n");
strcat(send_str,"host:");
strcat(send_str,hostname);
strcat(send_str,"\r\n");
strcat(send_str,"Content-Type: application/x-www-form-urlencoded\r\n");
strcat(send_str,"Content-Length:");
char len[20] = {NULL};
sprintf(len,"%d", strlen(para));
strcat(send_str,len);
strcat(send_str,"\r\n");
strcat(send_str,"Connection:keep-alive\r\n\r\n");
strcat(send_str,para);
//发送请求
if(send(Client_Sock,send_str,strlen(send_str)+1,0 ) == -1)
{
dwNum = MultiByteToWideChar (CP_ACP, 0, "发送失败", -1, NULL, 0);
msg = new wchar_t[dwNum];
MultiByteToWideChar (CP_ACP, 0, "发送失败", -1, msg, dwNum);
return msg; //代表失败
}
char cs_str[1024]={NULL};
char recv_str[8192]={NULL};
//获取网页响应内容
while(true)
{
//接收响应内容
int recv_num = recv(Client_Sock,cs_str,strlen(cs_str)+1,0 );
if(recv_num == 0)
{
break;
}
else if(recv_num <0)
{
char return_str[512] = {NULL};
char return_num[20]={NULL};
sprintf(return_num,"%d",strlen(recv_str));
strcat(return_str,return_num);
strcat(return_str,"|接收出错|");
sprintf(return_num,"%d",WSAGetLastError());
strcat(return_str,return_num);
dwNum = MultiByteToWideChar (CP_ACP, 0,return_str, -1, NULL, 0);
msg = new wchar_t[dwNum];
MultiByteToWideChar (CP_ACP, 0, return_str, -1, msg, dwNum);
return msg; //代表失败
}
//接收正常拼接字符串
strcat(recv_str,cs_str);
}
//转换字符串
dwNum = MultiByteToWideChar (CP_UTF8, 0,recv_str, -1, NULL, 0);
msg = new wchar_t[dwNum];
MultiByteToWideChar (CP_UTF8, 0, recv_str, -1, msg, dwNum);
//关闭socket
closesocket(Client_Sock);
WSACleanup();
//返回接收到的响应字符串
return msg;
}