C 发送http request

来源:互联网 发布:手机硬件信息软件 编辑:程序博客网 时间:2024/05/17 07:48
//remember free responsechar* sendTcpRequest(char* request, int port, char* addr) {if(request == NULL)return EMPTY_STR;WSADATA wsa;if(WSAStartup(MAKEWORD(2,2), &wsa) != 0) {return EMPTY_STR;}int sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(sclient == INVALID_SOCKET) {printf("invalid socket !");return EMPTY_STR;}struct sockaddr_in serAddr;serAddr.sin_family = AF_INET;serAddr.sin_port = htons(port);serAddr.sin_addr.S_un.S_addr = inet_addr(addr);int slen = sizeof(serAddr);if (connect(sclient, (struct sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR) {printf("connect error !");closesocket(sclient);return EMPTY_STR;}char recData[RECV_BUFLEN];int ret = 0;int i = 0;while(i < REQ_COUNT) {send(sclient, request, strlen(request), 0);ret = recv(sclient, recData, RECV_BUFLEN, 0);if(ret <= 0) {i ++;continue;}recData[ret] = 0x00;printf("===========================  Response  ==========================\n");puts(recData);if(strstr(recData, "200 OK") != NULL) {//receive more info from bridgememset(recData,'\0', RECV_BUFLEN);ret = recv(sclient, recData, RECV_BUFLEN, 0);if(ret > 0) {printf("===========================  Response  ==========================\n");puts(recData);}break;}}closesocket(sclient);WSACleanup();if(i >= REQ_COUNT) {printf("after %d times request, server still don't respond!\n", REQ_COUNT);return EMPTY_STR;} else {char* response = (char*) malloc(sizeof(char) * strlen(recData));strcpy(response, recData);return response;}}

0 0
原创粉丝点击