访问互联网我支持需要身份验证的代理。我知道将网络凭据传递给代理是非常简单的:
FtpWebRequest request = FtpWebRequest.Create(
new Uri("ftp://upload.myserver.com") as FtpWebRequest;
NetworkCredential credentials = new NetworkCredential("username", "password");
request.Credentials = credentials;
这有效!
我也尝试使用CredentialCache.DefaultNetworkCredentials
,但这不起作用。我想避免在任何地方存储用户名和密码(代码,数据库,配置文件)。
我认为最简单的方法是使用Internet Explorer访问互联网时显示的同一对话框。有谁知道如何提出这个对话框?
http://services.arcgisonline.com/arcgisexplorer500/help/proxy_connect_to_on_browser_request.png
修改
此任务的目标是通过FTP上传文件。最后我发现没有必要为FTP请求设置代理,因为.NET框架不允许通过HTTP代理进行FTP操作。但是您必须将代理属性显式设置为null。
FtpWebRequest request = FtpWebRequest.Create(
new Uri("ftp://upload.myserver.com") as FtpWebRequest;
NetworkCredential credentials = new NetworkCredential("username", "password");
request.Credentials = credentials;
request.Proxy = null;
多数民众赞成!
答案 0 :(得分:3)
首先,id说这不是IE对话框。它应该是一个构建系统对话框 此外,如果您调用它,您仍然需要访问输入的值并使用代码中的值。该对话框只是一个输入窗口,它不会让您的应用程序访问代理/互联网!所有错误处理(错误,凭据等)都必须由您自己完成 我认为检查代理是否需要(使用Windows注册表,wmi等)可能更容易,并弹出一个自定义表单,您可以轻松访问和重用这些值。
答案 1 :(得分:3)
在MSDN文章“Handling Authentication”中,作者写道:
代理验证
当客户端尝试使用代理时 要求身份验证,代理返回407状态代码消息 给客户。在该消息中,代理应包括一个或多个 代理验证响应头。这些标题包括 代理可用的身份验证方法。 WinINet选择了 它识别的第一种方法。
可以使用
InternetErrorDlg
function 从用户获取用户名和密码数据,或者a 可以设计定制的用户界面。
搜索了一下之后,我发现了Microsoft知识库文章“How To Handle Proxy Authorization with WinInet”,其中提供了有关如何使用此函数对代理用户进行身份验证的示例。
它们提供了一个(C ++)示例代码:
if ( InternetErrorDlg (GetDesktopWindow(),
hReq, ERROR_INTERNET_INCORRECT_PASSWORD,
FLAGS_ERROR_UI_FILTER_FOR_ERRORS |
FLAGS_ERROR_UI_FLAGS_GENERATE_DATA |
FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS,
NULL) == ERROR_INTERNET_FORCE_RETRY)
goto again;
(有关InternetErrorDlg
函数的P / Invoke示例,请参阅this MSDN blog post)。
“处理身份验证”一文进一步指出:
自定义界面可以使用
InternetSetOption
function设置INTERNET_OPTION_PROXY_PASSWORD
和INTERNET_OPTION_PROXY_USERNAME
值,然后将请求重新发送给代理。
所以我认为以下“工作流程”可能会成功:
request.Proxy = WebRequest.GetSystemWebProxy()
的默认代理。HttpWebRequest
(或FtpWebRequest
)InternetErrDlg
函数。此可以工作,因为this answer表示他刚刚打开Internet Explorer并在那里输入了代理凭据时成功使用了WebRequest
。
所以我的假设是,只要用户登录,代理信息就存储在Windows“用户会话”中的某个位置,并且在身份验证后可供所有应用程序使用。
由于我面临与原始海报相同的问题,我现在试着看看我的建议是如何实际运作的。
答案 2 :(得分:0)
也许这可以帮到你。不确定它正是你想要的。
http://sturla.simnet.is/post/2008/09/22/Enable-proxy-in-IE.aspx