WinInet::InternetSetOption(...) 总是返回 0 并且 GetLastError() 返回 12018

Posted

技术标签:

【中文标题】WinInet::InternetSetOption(...) 总是返回 0 并且 GetLastError() 返回 12018【英文标题】:WinInet::InternetSetOption(...) always returns 0 and GetLastError() returns 12018 【发布时间】:2013-04-11 08:35:55 【问题描述】:

我正在尝试使用 InternetSetOption(...) 方法设置代理的用户名和密码。但是,它始终返回零,并且 Last error 设置为 12018。 下面是我的代码 sn-p。

#include "stdafx.h"
#include <Wininet.h>


int _tmain(int argc, _TCHAR* argv[])

    HINTERNET _session = ::InternetOpen(_T("TestProgram"),
                              INTERNET_OPEN_TYPE_PRECONFIG,
                              NULL, NULL, NULL);
    LPCTSTR proxyUserName = L"username";
    LPCTSTR proxyPassword = L"userpassword";
    BOOL b = ::InternetSetOption(_session,INTERNET_OPTION_PROXY_USERNAME ,(LPVOID)proxyUserName,wcslen(proxyUserName)+1 );
        printf(" InternetSetOption returns - %d\n",b);
        printf(" InternetSetOption GetLastError - %d\n",GetLastError());

        b = ::InternetSetOption(_session,INTERNET_OPTION_PROXY_PASSWORD,(LPVOID)proxyPassword,wcslen(proxyPassword) +1 );
        printf(" InternetSetOption returns - %d\n",b);
        printf(" InternetSetOption GetLastError - %d\n",GetLastError());

        getchar();
    return 0;

我尝试以管理员和非管理员权限执行上述程序,但没有运气。 欢迎任何帮助。

谢谢, 呸呸呸

【问题讨论】:

【参考方案1】:

您使用了不正确的HINTERNET 句柄。 来自Option Flags 文档:

INTERNET_OPTION_PROXY_USERNAME 这个选项可以在句柄上设置 由 InternetConnect 或 HttpOpenRequest 返回。

INTERNET_OPTION_PROXY_PASSWORD 这个选项可以在句柄上设置 由 InternetConnect 或 HttpOpenRequest 返回。

因此,您必须使用InternetConnect()HttpOpenRequest()

【讨论】:

以上是关于WinInet::InternetSetOption(...) 总是返回 0 并且 GetLastError() 返回 12018的主要内容,如果未能解决你的问题,请参考以下文章