Проблема с Httpwebrequest (503) - PullRequest
1 голос
/ 20 июня 2011

Я использую HttpWebrequest, чтобы получить результат от google. Я использую прокси для получения данных. Теперь есть странная проблема, что для некоторых запросов он возвращает данные, а для некоторых выдает исключение The remote server returned an error: (503) Server Unavailable..Кто-то может подумать, что прокси-сервер плохой, но когда вы помещаете его в Internet Explorer, то открываете Google, это происходит там. Нет ошибки 503. then.but httpwebrequest выдает его на определенный запрос.

будет выдано исключение, когда, как если бы вы пошли на

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

Ответы [ 3 ]

2 голосов
/ 03 октября 2011

Вы получаете сообщение "извините, вы - спамбот", и вам нужно будет ввести капчу, чтобы продолжить или сменить прокси.По какой-то причине вы не можете извлекать содержимое страницы по умолчанию, когда вы получаете ошибку 503, хотя, если вы сделаете то же самое в браузере, содержимое будет отображаться вам.

2 голосов
/ 20 июня 2011

Странно.Возможно какая-то проблема с кодировкой 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()));
        }
    }
}
0 голосов
/ 11 мая 2016

Это зависит от того, как часто вы отправляете запрос в Google с тем же IP-адресом. Если вы отправите свои запросы в 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-страница, на которой вы должны ввести код с картинки

...