WebRequest"HEAD"轻量级替代品

Ser*_*pth 7 .net c# webrequest http-status-code-405

我最近发现以下内容不适用于某些网站,例如IMDB.com.

class Program
    {
        static void Main(string[] args)
        {
            try
            {
                System.Net.WebRequest wc = System.Net.WebRequest.Create("http://www.imdb.com"); //args[0]);

                ((HttpWebRequest)wc).UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.2.153.1 Safari/525.19";
                wc.Timeout = 1000;
                wc.Method = "HEAD";
                WebResponse res = wc.GetResponse();
                var streamReader = new System.IO.StreamReader(res.GetResponseStream());

                Console.WriteLine(streamReader.ReadToEnd());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

它返回HTTP 405(Method Not Allowed).我的问题是,我使用与上面非常相似的代码来检查链接是否有效以及绝大多数时候它是否正常工作.我可以将它切换到等于GET的方法并且它可以工作(增加超时),但这会使事情减慢一个数量级.我假设405响应是IMDB服务器端的服务器配置.

有没有办法让我在.NET中以轻量级的方式做同样的事情?或者,有没有办法修复上面的代码,所以它作为一个与imdb一起使用的GET请求?

Rob*_*sor 6

使用套接字(而不是HttpRequestWebClient)自行打开连接,并在读取状态代码后立即关闭流.幸运的是,状态代码接近响应流的顶部:)


Dan*_*fer 4

您必须澄清“轻量级”的含义。你想达到什么目的?

是否可以使用 GET/POST/HEAD/DELETE/etc 将取决于 URL 以及在该 URL 的服务器上运行的应用程序中的配置内容。

如果您想做的只是看看是否可以在不实际下载内容的情况下建立连接,您可以尝试使用套接字启动到端口 80 的连接,但是仅仅通过更改HTTP 方法。