将InternetConnect与IP地址一起使用失败(错误12029)

时间:2015-05-19 07:28:34

标签: c++ wininet

这里我有一个代码片段,当我使用IP地址时不起作用。但是在MSDN中它说参数可以是点分十进制IP地址,所以它必须清楚地工作。怎么了?谢谢。

#include "stdafx.h"        
        #include <windows.h>
        #include <wininet.h>
        #include <tchar.h>
        #include <iostream>        
        #pragma comment(lib,"wininet.lib")
        using namespace std;

        int _tmain(int argc, _TCHAR* argv[])
        {
            char szServer[] = "127.0.0.1";
            char szUrl[] = "/test/upload.php";
            char Data[] = "text123";
            char szHdrs[] =    "Content-Type: multipart/form-data; boundary=AaB03x";   
            char szTead[] =    "--AaB03x\r\n"
                               "Content-Disposition: form-data; name=\"file\"; filename=\"test.txt\"\r\n"
                               "Content-Type: application/octet-stream\r\n"
                                "\r\n";
            char szTail[] =     "\r\n"
                                "--AaB03x--\r\n";
            char szUserAgent[] = "MyUA";
            char *szTypes[] = {"*/*", NULL};
            HINTERNET hIOpen = InternetOpenA(szUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
            if(!hIOpen)
            {
                printf("InternetOpenA Error\n");
            }
            HINTERNET hIConnect = InternetConnectA(hIOpen, szServer, INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
            if(!hIConnect)
            {
                printf("InternetConnectA Error\n");
            }
            HINTERNET hHttpOpReq = HttpOpenRequestA(hIConnect, "POST", szUrl, NULL, NULL, (LPCSTR *)szTypes, 0, 1);
            if(!hHttpOpReq)
            {
                printf("HttpOpenRequestA Error\n");
            }
            BOOL bHttpSendReq = HttpSendRequestA(hHttpOpReq, szHdrs, strlen(szHdrs), Data, strlen(Data));
            if (!bHttpSendReq)
            {   int Error = GetLastError();
                printf("HttpSendRequest Error %d\n", Error);
            }


            system("pause");
            return 0;

        }

我可以添加更多内容,实际上是关于这个问题。我使用的是Windows 7 x64 Ultimate和VS2008。

现在我在其他XP和Seven机器上检查了这个.exe。看起来它有效,但不在我的机器上。也许问题是(在那里)其他地方。

1 个答案:

答案 0 :(得分:0)

三个提示:

  1. 将以下标记添加到您的internetconnect:

    INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_NO_CACHE_WRITE

  2. 还要将http添加到您的要求:

    char szServer [] =“http://127.0.0.1”;

  3. 您也可以尝试使用INTERNET_OPEN_TYPE_DIRECT而不是INTERNET_OPEN_TYPE_PRECONFIG

  4. 在我的代码库中我有一个解决12029错误的方法,但只有在文件下载期间连接丢失时才会发生 - 修复它我必须完全关闭所有WinInet句柄并重试下载。