HttpWebRequest 超时(被阻塞) c#

Posted

技术标签:

【中文标题】HttpWebRequest 超时(被阻塞) c#【英文标题】:HttpWebRequest timeout (being blocked) c# 【发布时间】:2016-10-18 15:44:43 【问题描述】:

我有一个从网站(种子)下载多个小文件的 c# 应用程序。一些网站限制每个 IP 每天的下载次数。

我执行 HttpWebRequest,如果流是有效的种子,我将其保存到磁盘。

有没有办法让我的 c# 应用程序在执行 HttpWebRequest 时欺骗我的 IP,这样下载就不会失败?

我将下载时间间隔设置为每 10 分钟一次,但没有运气。我最终还是被屏蔽了。

我听说“TOR”可以使用不同的 IP,但我不希望使用我的桌面应用程序的人必须单独安装 TOR 浏览器。

           HttpWebResponse resp = null;

        try
        
            var req = (HttpWebRequest)WebRequest.Create("http://www.exampe.com/test.torrent);
            req.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
            req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
            req.Timeout = 30000;
            req.KeepAlive = true;
            resp = (HttpWebResponse)(req.GetResponse());

        

有什么解决办法吗?

【问题讨论】:

【参考方案1】:

为此,您需要操作 tcp/ip 数据包。这意味着您需要捕获由 HttpWebRequest 创建的传出数据包并将其源 IP 更改为欺骗的。

我发现这个论坛帖子似乎与您想做的事情有关,请查看:http://pcapdotnet.codeplex.com/discussions/349978

据我所知,您可以通过 PCap.net 或 SharpPcap 库来实现。

【讨论】:

这样做不会阻止响应数据包返回给您吗?此外,您必须更改您的公共 IP 地址,这可能不是您系统的 IP 地址。 没错,欺骗 IP 应该在您的子网中,以便路由回您的网络。如果您在 NAT 服务器后面,我认为这是不可能的。您可以进行欺骗,但随着 NAT 再次更改数据包,这将毫无意义。

以上是关于HttpWebRequest 超时(被阻塞) c#的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 HttpWebRequest 长时间响应超时 Azure Web App

C#使用(HttpWebRequest)WebRequest.Create()判断是不是连接服务器时,请求时间过久

HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法

转载HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法

HttpWebRequest.GetResponse 方法卡住特定的 url

c# HttpWebRequest 使用代理访问网页,在vs中release调试的时候可以,直接运行出错