1

Catpcha コードが必要なため、ASP.net で Web サイトの Web スクレイピング プロジェクトを行っています。続行する前に、ユーザーがキー入力するための Captcha コードを取得する必要があります。

これまでのところ、プロジェクトは正常に動作していますが、私が見つけた唯一の問題は、キャプチャ コードの応答が完全にキャプチャされないことがあり、応答ストリームを画像に変換すると次のエラーが発生することでした:「パラメーターが無効です。」

Web ブラウザーにはこの問題がなく、サーバーがダウンしていない限り、常にキャプチャ コードを適切に表示できることに気付きました。

ただし、これは HttpWebRequest には意味がありません。取得できる場合と取得できない場合があります。応答ストリームが完全であることを確認する方法はありますか?

私のコードスニペットは次のとおりです。

public Image GetCaptchaCode()
{
    Image returnVal = null;
    Uri uri = new Uri(URL_CAPTCHA);
    HttpWebRequest request = null;
    HttpWebResponse response = null;

    try
    {
        // Get Cookies
        CookieCollection cookies = this.GetCookies();
        foreach (Cookie cookie in cookies)
        {
            Console.WriteLine(cookie.Name + ": " + cookie.Value);
        }

        // Get Catpcha
        request = (HttpWebRequest)HttpWebRequest.Create(uri);
        request.ProtocolVersion = HttpVersion.Version11;
        request.Method = WebRequestMethods.Http.Get; // use GET for loading Captcha
        request.CookieContainer = this._cookies; // Store Cookies Info
        System.Net.ServicePointManager.Expect100Continue = false;

        // Add more cookies
        if (cookies != null)
        {
            request.CookieContainer.Add(cookies);
        }

        // Handle Gzip Compression
        request.Headers.Add(HttpRequestHeader.AcceptEncoding, HEADER_TYPE);
        request.AutomaticDecompression = DecompressionMethods.GZip;
        request.Referer = URL_REFERER;
        request.UserAgent = USER_AGENT;

        // Get Response
        response = (HttpWebResponse)request.GetResponse();
        returnVal = Image.FromStream(response.GetResponseStream());

    }
    catch (Exception ex)
    {
        string errMsg = ex.Message;
    }
    finally
    {
        if (uri != null) uri = null;
        if (request != null) request = null;

        if (response != null)
        {
            response.Close();
            response = null;
        }

    }

    return returnVal;
}
4

0 に答える 0