1

送信されたURLに対して、Google画像とテキストの結果を取得するC#アプリケーションを作成しました。

問題は、を使用しているURLに対しては常に機能しますHTTPWEBREQUESTが、プロキシを使用すると機能しません。302Document Move502Serverが使用できないなどのエラーが発生しorます。

繰り返しますが、webbrowserコントロールを使用すると、プロキシで動作します。

私は自分の質問に関連する多くの質問と回答を見ましたが、どれも一致しません。

助言がありますか?

4

1 に答える 1

0

私自身の問題の解決策が見つかりました:

それが機能するためには、グーグルでhttpsプロキシを使用する必要があります。これは私のために機能し、異なる場所に応じて複数のURLを使用していたので適切なホストを作成しました。

これは私のコードです:

    public string getHtmltt(string url)
    {

        string responseData = "";
        try
        {
            string host = string.Empty;

            if (url.Contains("/search?"))
            {
                host = url.Remove(url.IndexOf("/search?"));

                if(host.Contains("//"))
                {
                    host = host.Remove(0, host.IndexOf("//")).Replace("//","").Trim();
                }
            }
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Accept = "application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
            request.AllowAutoRedirect = true;
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
            request.Timeout = 60000;
            request.Method = "GET";
            request.KeepAlive = false; ;


           // request.Host = "www.google.com.af";
            request.Host = host;
            request.Headers.Add("Accept-Language", "en-US");

            //request.Proxy = null;
           // WebProxy prx = new WebProxy("199.231.211.107:3128");

            WebProxy prx = new WebProxy(proxies[0].ToString().Trim());

            request.Proxy = prx;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            if (response.StatusCode == HttpStatusCode.OK)
            {
                Stream responseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(responseStream);
                responseData = myStreamReader.ReadToEnd();
            }

            foreach (Cookie cook in response.Cookies)
            {
                inCookieContainer.Add(cook);
            }
            response.Close();



        }
        catch (System.Exception e)
        {
            responseData = "An error occurred: " + e.Message;

        }

        return responseData;

    }

そしてこれまでのところ、その動作するgr8。

于 2012-08-23T00:57:23.507 に答える