1

私はHttpWebrequestグーグルから結果を取得するために使用しています。データを取得するためにプロキシを使用しています。今、いくつかのクエリではデータを返し、いくつかでは例外をスローするという奇妙な問題がありますThe remote server returned an error: (503) Server Unavailable.。プロキシは悪いと思うかもしれませんが、Internet Explorerに入れてグーグルを開くと、そこに503エラーはありませhttpwebrequestん。

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

3 に答える 3

3

「申し訳ありませんが、スパムボットメッセージです」というメッセージが表示されます。続行するか、プロキシを変更するには、キャプチャを入力する必要があります。何らかの理由で、503エラーが発生した場合、デフォルトではページのコンテンツをプルできませんが、ブラウザで同じことを行うと、コンテンツが表示されます。

于 2011-10-03T05:29:00.023 に答える
2

それは変だ。たぶん、いくつかの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()));
        }
    }
}
于 2011-06-19T21:07:17.617 に答える
0

同じIPアドレスでGoogleにクエリを送信する頻度によって異なります。クエリをGoogleに送信する速度が速すぎると、GoogleはIPアドレスをブロックします。これが発生すると、Googleはsorry-pageへのリダイレクトを含む503エラーを返します。

このようなことをします:

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

また、デバッグするときは、html変数にある値を確認してください。これは、キャプチャコードを入力する必要があるHTMLページであることがわかります。

于 2016-05-11T07:28:21.510 に答える