【问题标题】:.Net HttpWebRequest Get request return WebException.Net HttpWebRequest 获取请求返回 WebException
【发布时间】:2017-04-09 13:36:09
【问题描述】:

尝试创建两次获取请求。然而,第二个请求总是抛出 WebException 并显示消息:“底层连接已关闭:连接已意外关闭。”

这是我使用的代码spinet

public string Get(string url)
    {
        string strResult = "";
        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "GET";
            request.CookieContainer = new CookieContainer();
            request.UserAgent = this.UserAgent;
            request.KeepAlive = false;

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader reader = new StreamReader(stream, Encoding.UTF8);
            strResult = reader.ReadToEnd();
            response.Close();
        }
        catch (Exception ex)
        {
            //Todo
        }
        return strResult;
    }

我请求这个url

如果我启动提琴手似乎第二个请求正常工作。 如果我使用 HttpClient 类,它似乎也可以。

【问题讨论】:

标签: c# .net get httpwebrequest


【解决方案1】:

当您启动 fiddler 时,请求之间是否有任何延迟(您是否在中间遇到断点)。也许在您的通话之间添加一个快速的Thread.Sleep(250);

另外一点,添加一些 using 语句来关闭一次性类。

try {
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "GET";
    request.CookieContainer = new CookieContainer();
    request.UserAgent = this.UserAgent;
    request.KeepAlive = false;

    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    using (Stream stream = response.GetResponseStream())
    using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { 
        strResult = reader.ReadToEnd();
        response.Close();
}

【讨论】:

  • 试过你的代码在第二次请求时仍然抛出异常。但是,如果我请求 google(www.google.com) 端点它工作正常。
猜你喜欢
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多