0

安全な Web サイトで、同じ Web サイトのページに HttpWebRequest.GetResponse() を介してアクセスしています (理由があります)。タイムアウトを高く設定すると、動作するようになり、実行に約 2 分かかります。ブラウザで同じページを読み込むのに 2 秒もかかりません。以下のコードで私の実験のいくつかを見ることができます: Google の読み込みは高速、コンテンツのない安全なページの読み込みは低速、安全でない (http) ページの読み込みは低速です。ただし、Cookie を追加するコードのセクションをコメント アウトすると、安全でないページがすぐに実行されます。Cookie は Google への呼び出しには影響しないことに注意してください。サーバーが Cookie の処理に永遠にかかる必要があるようです。理由、またはそれを修正するために私にできることはありますか?

public static string GetPageHtmlSecure(string url, HttpContext inContext = null)
{
    string pageHtml;
    HttpContext context;


    if (inContext != null)
    {
        context = inContext;
    }
    else
    {
        context = HttpContext.Current;
    }

    // we've already validated the server's ID, don't need to do it again
    ServicePointManager.ServerCertificateValidationCallback += skipCertValidation;

    // create web request
    //HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.google.com");

    //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://secure/page/no/content");
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://not/secure/page/");
    // attach the cookies the user has to this request
    request.CookieContainer = new CookieContainer();
    Cookie c = new Cookie();
    for (int i = 0; i < context.Request.Cookies.Count; i++)
    {
        c.Name = context.Request.Cookies[i].Name;
        c.Value = context.Request.Cookies[i].Value;
        c.Domain = request.RequestUri.Host;
        c.Expires = context.Request.Cookies[i].Expires;
        c.Path = context.Request.Cookies[i].Path;
        c.Secure = context.Request.Cookies[i].Secure;

        request.CookieContainer.Add(c);
    }

    request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)";
    request.Method = "GET";
    request.ContentType = "text/xml";
    request.Timeout = 200000;
    request.ReadWriteTimeout = 200000;
    request.KeepAlive = false;
    request.Proxy = null;

    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        using (System.IO.StreamReader sr = new StreamReader(response.GetResponseStream()))
        {
            pageHtml = sr.ReadToEnd();
        }
    }
    return pageHtml;
}
4

0 に答える 0