问题HttpWebRequest的(503)(Problem with Httpwebrequest

2019-09-30 02:43发布

我使用HttpWebrequest从google.I使用代理服务器来获取data.now有一个奇怪的问题,对于一些查询其返回的数据得到的结果和对一些人来说抛出异常The remote server returned an error: (503) Server Unavailable. 。 有人可能会认为代理是坏的,但是当你把它在Internet Explorer,然后打开Google是there.no 503错误then.but httpwebrequest赋予它某些query.ie如果你打算让

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

它会抛出例外,因为如果你去

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

有用。

到目前为止我的代码是

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(file);
                request.ProtocolVersion = HttpVersion.Version11;
                request.Method = "GET";
               request.KeepAlive = false;
                request.ContentType = "text/html";
                request.Timeout = 1000000000;
                request.ReadWriteTimeout = 1000000000;
                request.UseDefaultCredentials = true;
                request.Credentials = CredentialCache.DefaultCredentials;
    Uri newUri = new Uri("http://" + proxy[selectedProxy].ProxyAddress.Trim() + "/");
                    WebProxy myProxy = new WebProxy();
                    myProxy.Credentials = CredentialCache.DefaultCredentials;
                    myProxy.Address = newUri;
                    request.Proxy = myProxy;
 WebResponse response = request.GetResponse();
                    // System.Threading.Thread.Sleep(Delay);
                    StreamReader reader = null;
                    string data = null;
                    reader = new StreamReader(response.GetResponseStream());
                        data = reader.ReadToEnd();

Answer 1:

这很奇怪。 也许有些url编码问题。 试试这应该照顾妥善处理一切的以下情况:

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()));
        }
    }
}


Answer 2:

你被击中了“对不起,你是一个垃圾邮件机器人的消息”,将需要输入验证码继续或更改代理。 出于某种原因,你不能在默认情况下拉页面内容,当你得到一个503错误,但如果你在浏览器中做同样的事情,内容会显示给你。



Answer 3:

这取决于你如何往往将查询发送到谷歌相同的IP地址。 如果你把你的查询,谷歌太快,那么谷歌将阻止你的IP地址。 发生这种情况时,谷歌会返回503错误与重定向到他们的遗憾页。

做这样的事情:

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

和调试时,检查这在HTML变量的值。 你会看到,这是一个HTML页面,你应该在图形验证码填写



文章来源: Problem with Httpwebrequest (503)