Httpwebrequest的问题(503)

时间:2011-06-19 21:00:06

标签: c# winforms httpwebrequest webexception

我正在使用HttpWebrequest从google获取结果。我使用代理来获取数据。现在有一个奇怪的问题,对于某些查询,它会返回数据,对于某些查询,它会抛出异常{{1 }}。有人可能会认为代理很糟糕但是当你把它放在网络浏览器中然后你打开谷歌它就在那里。然后503错误。但是The remote server returned an error: (503) Server Unavailable.在特定查询中给出它。如果你打算获得

httpwebrequest

它会抛出异常,就好像你去了

http://www.google.com/search?q=site:http://www.yahoo.com 

它有效。

到目前为止,我的代码是

http://www.google.com/search?q=info:http://www.yahoo.com

3 个答案:

答案 0 :(得分:2)

这很奇怪。也许有些网址编码问题。请尝试以下方法,以便妥善处理所有事情:

using System;
using System.Net;
using System.Web;

class Program
{
    static void Main()
    {
        using (var client = new WebClient())
        {
            var newUri = new Uri("http://proxy.foo.com/");
            var myProxy = new WebProxy();
            myProxy.Credentials = CredentialCache.DefaultCredentials;
            myProxy.Address = newUri;
            client.Proxy = myProxy;

            var query = HttpUtility.ParseQueryString(string.Empty);
            query["q"] = "info:http://www.yahoo.com";
            var url = new UriBuilder("http://www.google.com/search");
            url.Query = query.ToString();
            Console.WriteLine(client.DownloadString(url.ToString()));
        }
    }
}

答案 1 :(得分:2)

你被“很抱歉你是一个spambot消息”所击中,并且需要输入验证码才能继续或更改代理。出于某种原因,当您收到503错误时,默认情况下无法拉取页面内容,但如果您在浏览器中执行相同的操作,则会显示内容。

答案 2 :(得分:0)

这取决于您使用相同的IP地址向Google发送查询的频率。如果您过快地向Google发送查询,那么Google会阻止您的IP地址。发生这种情况时,Google会返回503错误,并重定向到对不起页面。

做这样的事情:

try
            {
                response = (HttpWebResponse) webRequest.GetResponse();
            }
            catch (WebException ex)
            {
                using (var sr = new StreamReader(ex.Response.GetResponseStream()))
                {
                    var html = sr.ReadToEnd();
                }
            }

调试时,检查html变量中的值。您将看到这是一个HTML页面,您应该在其中填写验证码