0

Web サイトのニュース ページをダウンロードするための多くの Web 要求を作成するアプリケーションを使用しています (多くの Web サイトをテストしました)。 HttpWebResonse が応答を取得できません。この仕事をする機能だけを投稿します。

    public PageFetchResult Fetch()
    {
        PageFetchResult fetchResult = new PageFetchResult();
        try
        {
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(URLAddress);
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            Uri requestedURI = new Uri(URLAddress);
            Uri responseURI = resp.ResponseUri;
            if (Uri.Equals(requestedURI, responseURI))
            {
                string resultHTML = "";
                byte[] reqHTML = ResponseAsBytes(resp);
                if (!string.IsNullOrEmpty(FetchingEncoding))
                    resultHTML = Encoding.GetEncoding(FetchingEncoding).GetString(reqHTML);
                else if (!string.IsNullOrEmpty(resp.CharacterSet))
                    resultHTML = Encoding.GetEncoding(resp.CharacterSet).GetString(reqHTML);

                resp.Close();
                fetchResult.IsOK = true;
                fetchResult.ResultHTML = resultHTML;
            }
            else
            {
                URLAddress = responseURI.AbsoluteUri;
                relayPageCount++;
                if (relayPageCount > 5)
                {
                    fetchResult.IsOK = false;
                    fetchResult.ErrorMessage = "Maximum page redirection occured.";
                    return fetchResult;
                }
                return Fetch();
            }
        }
        catch (Exception ex)
        {
            fetchResult.IsOK = false;
            fetchResult.ErrorMessage = ex.Message;
        }
        return fetchResult;
    }

どんな解決策でも大歓迎です

4

2 に答える 2

0

私は@volodyに同意します。また、HttpWebRequestにはすでにMaximumAutomaticRedirectionsというプロパティがあり、これは50に設定されています.5に設定すると、このコードで探しているものを自動的に達成できます.例外が発生し、あなたによって処理されます.コード。

設定するだけ

request.MaximumAutomaticRedirections  = 5;
于 2010-05-15T08:06:49.777 に答える
0

Fetch 関数は再帰的に呼び出され、常に HttpWebRequest を作成しますが、url が一致した場合にのみ解放します。else ステートメントでリクエストとレスポンスを閉じる必要があります。

于 2010-05-15T04:52:45.133 に答える