Windows C下利用wininet傳送http請求
阿新 • • 發佈:2019-01-10
在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時出問題,希望知道答案的朋友不吝賜教。先謝謝了!