9

特定の URL がライブ URL かどうかを確認するツールがあります。特定の URL が公開されている場合、当社のソフトウェアの別の部分がそのコンテンツを選別してスクラップにすることができます。

これは、URLが有効かどうかを確認するための私のコードです

    public static bool IsLiveUrl(string url)
    {
        HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest;
        webRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5";
        webRequest.CookieContainer = new CookieContainer();
        WebResponse webResponse;
        try
        {
            webResponse = webRequest.GetResponse();
        }
        catch (WebException e)
        {
            return false;
        }
        catch (Exception ex)
        {

            return false;
        }
        return true;
    }

このコードは完全に機能しますが、Apache でホストされている特定のサイトでは、次のメッセージで Web 例外が発生します。「リモートサーバーがエラーを返しました: (403) Forbidden」さらに調べてみると、WebException オブジェクトに次の詳細が見つかりました

Status="ProtocolError" StatusDescription="悪い動作"

これはリクエストヘッダーです "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5 Host: Scenespares.co.uk Connection: Keep-Alive "

これは応答ヘッダーです "Keep-Alive: timeout=4, max=512 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: テキスト/html "

vs2008 でウォッチを使用してこれらのヘッダーを抽出しました。使用中のフレームワークは 3.5 です。

4

3 に答える 3

13

私がする必要があるのは、次のことだけであることが判明しました

            webRequest.Accept = "*/*";
            webResponse = webRequest.GetResponse();

そしてそれは修正されました。

于 2011-01-13T10:55:05.570 に答える