Dea*_*nna 13 c# httpwebrequest http-proxy .net-2.0 transparentproxy
我们正在使用这些HTTPWebRequest对象向我们的应用程序发出HTTP请求,当请求需要身份验证并且存在透明代理(Squid 3.1.10)时,我们遇到了问题.
string url = "http://www.icode.co.uk/test/auth.php";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = new NetworkCredential("username", "password");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
MessageBox.Show(reader.ReadToEnd());
reader.Close();
stream.Close();
response.Close();
Run Code Online (Sandbox Code Playgroud)
我们的原始代码使用了WebClient类,它表现出同样的问题.
第一次运行此代码时,它会正确显示结果.当代码第二次运行时,它在以下GetResponse()行中失败:
System.Net.WebException was unhandled
Message="The server committed a protocol violation. Section=ResponseStatusLine"
Source="System"
StackTrace:
at System.Net.HttpWebRequest.GetResponse()
at Dummy.DummyForm.button1_Click(Object sender, EventArgs e) in H:\Trial\Dummy\DummyForm.cs:line 42
at ...
Run Code Online (Sandbox Code Playgroud)
在Windows 7上,重新启动进程会使其恢复并运行一次,但Server 2003需要完全重新启动.
查看网络捕获,两个请求与开始时相同,发送初始未经身份验证的请求并且服务器回复,但失败请求在初始回复的中间发送第二个经过身份验证的请求,就好像它忽略了Content-Length标头(这是正确).然后它接收剩余的初始回复并因协议错误而失败.

HTTPWebRequest尽管如此,client()并没有干净地关闭连接,这似乎很奇怪.
当代理未使用时(非端口80或内部流量),请求全部按预期工作.如果没有身份验证,它也可以正常工作,因为它只生成单个请求.
我已经将问题代码减少到最小并使用MSDN示例重现它,但是有人知道这是已知问题还是我们(.NET或Squid)配置中的问题?
| 归档时间: |
|
| 查看次数: |
6366 次 |
| 最近记录: |