【问题标题】:HttpWebResponse failing due to "unable to read data from transport connection"HttpWebResponse 由于“无法从传输连接读取数据”而失败
【发布时间】:2021-08-19 20:29:24
【问题描述】:

我正在使用 Selenium 尝试使用下面的代码测试是否存在损坏的链接。我将创建一个 Http 请求并检查响应的状态代码。但是我发现虽然驱动程序可以导航到网站上的任何页面,但代码在request.GetResponse()

private const string BASE_URL = "https://something.example.com"

        using(IWebDriver driver = new ChromeDriver())
        {
            brokenLinks = new List<string>();
            //navigate to home page
            driver.Navigate().GoToUrl(BASE_URL);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(BASE_URL);
            
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            response.Close();
       }

返回的错误只是Error: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host,它没有让我知道问题可能是什么。

我尝试将基本 URL 更改为指向另一个站点(例如新闻站点)并且响应似乎工作正常 - 这让我相信这可能是某种服务器上的问题 - 任何指针一切将不胜感激

【问题讨论】:

  • “强制关闭”表示 TCP 连接未完成。它通常意味着以下 1) 服务器在客户端之前启动 2) 客户端和服务器使用不同的端口号 3) 客户端正在尝试连接到环回地址 127.0.0.1 (或配置为环回的本地主机)。 4)服务器和客户端都使用相同的IP地址。服务器应该监听 IP Address.any。客户端应连接到机器 IP 地址(或名称)。 5)您尝试使用 IPV4 或 IPV6(或相反)。 IPAddress 是一个数组。索引 0 是 IPV6,索引 1 是 IPV4
  • 最好使用HttpClient而不是过时的HttpWebRequest

标签: c# selenium-chromedriver httpwebrequest httpwebresponse


【解决方案1】:

在我的例子中,在创建响应之前添加以下代码解决了这个问题:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;                    
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link);
request.AllowAutoRedirect = true;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多