C# C“HttpWebRequest报告”;407需要代理身份验证";IE浏览器关闭时出错

C# C“HttpWebRequest报告”;407需要代理身份验证";IE浏览器关闭时出错,c#,proxy,httpwebrequest,credentials,C#,Proxy,Httpwebrequest,Credentials,背景 目前,我们有一个场景,代理设置通过wpad文件分发。网络中的每台计算机应在Internet Explorer上设置以下配置: 在IE上配置此代理设置后,我可以通过HTTP导航,而不会出现任何问题。在IE中打开网页之前,我从未被要求提供任何用户名/密码凭证来通过代理 问题 在这里,我们有一个应用程序,它运行以下C#代码来进行数据流下载: 公共流PostStream(字符串api、字符串数据) { var payload=Encoding.UTF8.GetBytes(数据); var htt

背景

目前,我们有一个场景,代理设置通过wpad文件分发。网络中的每台计算机应在Internet Explorer上设置以下配置:

在IE上配置此代理设置后,我可以通过HTTP导航,而不会出现任何问题。在IE中打开网页之前,我从未被要求提供任何用户名/密码凭证来通过代理

问题

在这里,我们有一个应用程序,它运行以下C#代码来进行数据流下载:

公共流PostStream(字符串api、字符串数据)
{
var payload=Encoding.UTF8.GetBytes(数据);
var httpWebRequest=(httpWebRequest)WebRequest.Create(新Uri(api));
httpWebRequest.Method=“POST”;
httpWebRequest.ContentType=“application/json;charset=UTF-8”;
httpWebRequest.ContentLength=有效负载.Length;
httpWebRequest.AllowReadStreamBuffering=false;
httpWebRequest.AutomaticDecompression=DecompressionMethods.GZip | DecompressionMethods.Deflate;
httpWebRequest.Proxy.Credentials=CredentialCache.DefaultCredentials;
httpWebRequest.UseDefaultCredentials=true;
使用(var stream=httpWebRequest.GetRequestStream())
{
流写入(有效负载,0,有效负载长度);
}
var httpWebResponse=httpWebRequest.GetResponse();
返回httpWebResponse.GetResponseStream();
}
好的,
httpWebRequest
应该能够自动创建一个默认的
代理
实例,该实例继承IE上的代理设置,(我调试了代码,我可以看到自动配置脚本已加载/使用在代理实例中),有趣的是:

  • 如果我在我的计算机上保持Internet Explorer打开,然后运行我的应用程序,一切正常
  • 但如果我关闭Internet Explorer然后运行我的应用程序,它会抛出“需要407代理身份验证”异常
因此,我的问题是:

  • 在我使用应用程序下载数据时保持Internet Explorer打开的原因是什么
  • 如何改进我的C#代码以解决此问题?也许我可以在代码中设置代理凭据,但是凭据是什么?当我访问HTTP资源时,从来没有人要求我提供任何凭据
  • 提前谢谢