InternetOpenUrl错误87

时间:2016-05-27 14:29:58

标签: c++ windows winapi

我在我的程序的其他两个地方打电话给InternetOpenUrl,它完美无瑕。但是我最后一次调用它时失败并出现错误87(参数不正确)。这很奇怪,因为除了url之外,参数完全相同。 这是我的代码:

wchar_t url[] = {'h','t','t','p','s',':','/','/','w','w','w','.','e','x','a','m','p','l','e','.','c','o','m', 0};
HINTERNET hFile = NULL;

hOpen = InternetOpenW(L"MyAgent", NULL, NULL, NULL, NULL);
if (!hOpen)
    ret = EXIT_FAILURE;

DWORD dwRequestFlags = 
              INTERNET_FLAG_NO_UI
            | INTERNET_FLAG_NO_AUTH
            | INTERNET_FLAG_PRAGMA_NOCACHE
            | INTERNET_FLAG_NO_CACHE_WRITE;

hFile = InternetOpenUrlW(hOpen, url, NULL, NULL, dwRequestFlags, NULL);

然后我使用GetLastError()找出它是87。

1 个答案:

答案 0 :(得分:1)

即使InternetOpenUrl()失败,您也在呼叫InternetOpen(),因此hOpen无效。做这样的事情:

hOpen = InternetOpenW(L"MyAgent", NULL, NULL, NULL, NULL);
if (!hOpen)
    ret = EXIT_FAILURE;
else
{
    DWORD dwRequestFlags = 
              INTERNET_FLAG_NO_UI
            | INTERNET_FLAG_NO_AUTH
            | INTERNET_FLAG_PRAGMA_NOCACHE
            | INTERNET_FLAG_NO_CACHE_WRITE;

    hFile = InternetOpenUrlW(hOpen, url, NULL, NULL, dwRequestFlags, NULL);
    if (!hFile)
        ret = EXIT_FAILURE;
    else
      // and so on...
}

或者:

ret = 0;

hOpen = InternetOpenW(L"MyAgent", NULL, NULL, NULL, NULL);
if (!hOpen)
    ret = EXIT_FAILURE;

if (ret == 0)
{
    DWORD dwRequestFlags = 
              INTERNET_FLAG_NO_UI
            | INTERNET_FLAG_NO_AUTH
            | INTERNET_FLAG_PRAGMA_NOCACHE
            | INTERNET_FLAG_NO_CACHE_WRITE;

    hFile = InternetOpenUrlW(hOpen, url, NULL, NULL, dwRequestFlags, NULL);
    if (!hFile)
        ret = EXIT_FAILURE;
}

if (ret == 0)
{
    // and so on...
}

此外,这一行:

wchar_t url[] = {'h','t','t','p','s',':','/','/','w','w','w','.','e','x','a','m','p','l','e','.','c','o','m', 0};

可以这样重写:

wchar_t url[] = L"https://www.example.com";

甚至这个(因为没有必要制作文字数据的本地副本):

const wchar_t *url = L"https://www.example.com";