在Windows下,通过使用wininet库发送http请求,以下是代码实例:
char szBuffer[1024] = {0};//声明全局变量,作为服务端返回的数据 void SendHttpRequest(char ip[], int port, char url[])//参数说明:IP:1.2.3.4 port:40000, url:"/login" { DWORD dwSize = 1024; DWORD dwDownload = 0; //char data[] = "changzhi"; //init HINTERNET hInternet = InternetOpen("CEHTTP", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); //open http session HINTERNET hSession = InternetConnect(hInternet, ip, port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0); //open http post request handle char * szAccept[] = {"/", NULL}; HINTERNET hRequest = HttpOpenRequest(hSession, "POST", url, NULL, NULL, (LPCSTR*)szAccept, INTERNET_FLAG_NO_CACHE_WRITE, 0); //send request HttpSendRequest(hRequest, NULL, 0, data, strlen(data)); //get receive data and store InternetReadFile(hRequest, szBuffer, dwSize, &dwDownload); }
关闭这个http连接需要用到的代码:
InternetCloseHandle(hRequest); InternetCloseHandle(hSession); InternetCloseHandle(hInternet);
当然了,以上代码要包含wininet.h这个头文件。
在编译的时候可以这样编译:
gcc http.c -o http -l wininet
注意要加上wininet链接库
如果设置http的header可以这样:
TCHAR *szHeaders = "Content-type:application/json\nAccept:application/json"; //这样发送请求 HttpSendRequest(hRequest, szHeaders, strlen(szHeaders, data, strlen))
需要注意的是:
当server端没有启动时,在执行InternetReadFile( 即返回数据 )时,是会出错的,这点需要注意下。不明白的是,当server端没有启动的时候,为什么在HttpOpenRequest或者InternetConnect的时候不报错( 或者返回NULL ),而是InternetReadFile时出问题,希望知道答案的朋友不吝赐教。先谢谢了!