现在的位置: 首页 > 综合 > 正文

Windows C下利用wininet发送http请求

2018年08月15日 ⁄ 综合 ⁄ 共 1265字 ⁄ 字号 评论关闭

在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时出问题,希望知道答案的朋友不吝赐教。先谢谢了!

抱歉!评论已关闭.