【发布时间】:2016-10-24 16:19:03
【问题描述】:
我正在编写一个简单的 Web 代理应用程序(作为 IHttpHandler 工作),它基本上执行传入的请求并返回响应,它看起来是这样的:
public void ProcessRequest(HttpContext context)
{
var destinationUrl = GetDestinationUrlFromRequest(context);
var destinationRequest = WebRequest.Create(destinationUrl);
CopyHeadersFromTo(context.Request, destinationRequest);
var destinationResponse = destinationRequest.GetResponse();
CopyHeadersFromTo(destinationResponse, context.Response);
var destinationResponseStream = destinationResponse.GetResponseStream();
using (var streamReader = new StreamReader(destinationResponseStream))
{
var result = streamReader.ReadToEnd();
context.Response.Write(result);
streamReader.Close();
}
context.Response.End();
}
另外,我还有另一个小应用程序,它从上面查询一个以获得响应:
public string QueryData(ICredentials credentials)
{
var request = (HttpWebRequest) WebRequest.Create("myproxyapp.com/?url=urltoProxy.com");
request.Method = "POST";
request.ContentLength = 0;
request.KeepAlive = false;
request.ProtocolVersion = HttpVersion.Version10;
request.ServicePoint.ConnectionLimit = 1;
if (credentials != null)
{
request.Credentials = credentials;
}
else
{
request.UseDefaultCredentials = true;
}
using (var response = (HttpWebResponse) request.GetResponse())
{
using (var sr = new StreamReader(response.GetResponseStream()))
{
return sr.ReadToEnd();
}
}
}
在 sr.ReadToEnd() 上我不断得到这个:
抛出异常:System.dll 中的“System.IO.IOException”
附加信息:无法从传输中读取数据 连接:连接已关闭。
有人可以帮忙解决这个问题吗?
【问题讨论】:
-
我会使用FiddlerCore
-
您没有发布任何内容。这看起来像一个 GET 请求。你用 request.Method = "GET" 试过了吗?
-
@JanneP,是的,帖子正文是空的,但是目的地需要使用POST方法
-
@L.B,它对我有什么帮助?
-
@MaxDove 如果你在阅读页面时没有看到它,那么它真的帮不了你..算了。
标签: c# networking proxy httpwebrequest httphandler