通过Wininet的HTTP POST请求

时间:2019-03-29 03:00:58

标签: c++ http visual-c++ wininet

VC ++ 中,我试图发送HTTP POST请求并获得其响应。

我有以下代码,可以成功编译,但无法开机自检。

首先,我尝试将POST请求发送到请求容器以进行测试

int main(int argc, _TCHAR* argv[])
{
    static CHAR hdrs[] = "Content-Type: application/x-www-form-urlencoded";
    static CHAR frmdata[] = "name=John+Doe&userid=hithere&other=P%26Q";

    HINTERNET hSession = InternetOpenA("MyAgent", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    HINTERNET hConnect = InternetConnect(hSession "pipedream.com", 8733, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
    HINTERNET hRequest = HttpOpenRequestA(hConnect, "POST", "/r/enj77inn26shk", NULL, NULL, NULL, 0, 1);
    HttpSendRequestA(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata));

然后使用读取

    DWORD dwContentLen;
    DWORD dwBufLen = sizeof(dwContentLen);
    if (HttpQueryInfo(hRequest,
                  HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER,
                  (LPVOID)&dwContentLen,
                  &dwBufLen,
                  0))
    {
        char *pData = (char*)GlobalAlloc(GMEM_FIXED, dwContentLen + 1);
        DWORD dwReadSize = dwContentLen / 10;   // We will read 10% of data
                                            // with each read.

        DWORD cReadCount;
        DWORD dwBytesRead;
        char *pCopyPtr = pData;
        for (cReadCount = 0; cReadCount < 10; cReadCount++)
        {
            InternetReadFile(hRequest, pCopyPtr, dwReadSize, &dwBytesRead);
            pCopyPtr = pCopyPtr + dwBytesRead;
        }
        // extra read to account for integer division round off
        InternetReadFile(hRequest,
                     pCopyPtr,
                     dwContentLen - (pCopyPtr - pData),
                     &dwBytesRead);
        // Null terminate data
        pData[dwContentLen] = 0;
    }
    cout <<pCopyPtr ;
    system ("pause");
    return 0;
}

我要发布到的端点

image

0 个答案:

没有答案