Проблема сообщения HTTPS C # (с Fiddler) - PullRequest
1 голос
/ 23 июня 2009

В основном у меня есть этот код ниже и последний шаг FinalStepGetReportData () генерирует исключение при возврате (HttpWebResponse) request.GetResponse (); если fiddler выключен?

Все остальное работает, когда Fiddler выключен, кроме этого последнего шага.Когда я включу Fiddler на последнем этапе работ?

Есть идеи?Я бьюсь головой о стену.

Спасибо


public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy
    {
        public TrustAllCertificatePolicy() { }
        public bool CheckValidationResult(ServicePoint sp,
            X509Certificate cert,
            WebRequest req,
            int problem)
        {
            return true;
        }
    }

        public void Download()
        {
            string cookiesInRawFormat = null;
            NameValueCollection headers = null;
            HttpWebResponse response = null;

            request = (HttpWebRequest)HttpWebRequest.Create(Config.ReportUrl);
            System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
            request.Accept = "image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
            request.KeepAlive = true;
            request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)";

            headers = new NameValueCollection()
            {
                { "Accept-Language", "en-us,en;q=0.5" }
            };

            request.Headers.Add(headers);
            request.CookieContainer = cookies;
            response = (HttpWebResponse) request.GetResponse();
            cookiesInRawFormat = response.Headers["Set-Cookie"];
            if (!String.IsNullOrEmpty(cookiesInRawFormat))
            {
                ParseCookiesFromResponseHeader(cookiesInRawFormat);
            }
            string location = response.ResponseUri.AbsolutePath;

            using (response = SignIn(location))
            {
                                using (Stream dataStream = FinalStepGetReportData(response, location).GetResponseStream())
                {
                    // Open the stream using a StreamReader for easy access.
                    using (StreamReader reader = new StreamReader(dataStream))//, Encoding.UTF8))
                    {
                        // Read the content.
                        string responseFromServer = reader.ReadToEnd();
                        // Display the content.
                        Console.WriteLine(responseFromServer);
                    }
                }
            }
        }

        private HttpWebResponse SignIn(string referrerLocation)
        {
            request = (HttpWebRequest)HttpWebRequest.Create(Config.SignInUrl);
            request.Accept = "image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
            request.KeepAlive = true;
            request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)";
            request.ContentType = "application/x-www-form-urlencoded";
            request.Referer = referrerLocation;
            System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();

            NameValueCollection headers = new NameValueCollection()
            {
                { "Accept-Language", "en-us,en;q=0.5" },
                { "Cache-Control", "no-cache" }
            };

            request.Method = HttpMethod.POST.ToString();
            request.Headers.Add(headers);
            request.CookieContainer = cookies;
            request.AllowAutoRedirect = false;

            PostDataBuilder builder = new PostDataBuilder() { 
                { "action", "sign-in" },
                { "disableCorpSignUp", String.Empty },
                { "email", Config.UserName },
                { "metadata1", "Firefox 3.0.10 Windows" },
                { "metadata2", "Mozilla Default Plug-in Java(TM) Platform SE 6 U12 QuickTime Plug-in 7.6 Windows Genuine Advantage 19000912007 Microsoft Office system Shockwave Flash 10012iTunes Application Detector Silverlight Plug-In 20401150Windows Presentation Foundation RealPlayer(tm) G2 LiveConnect-Enabled Plug-In (32-bit)  RealPlayer Version Plugin 601269Java(TM) Platform SE 6 U12 16012||1280-1024-971-32-*-*-*" },
                { "metadata3", "timezone: -2 execution time: 3" },
                { "metadataf1", String.Empty },
                { "mode", "1" },
                { "pageAction", "****THE HTML PAGE*****" },
                { "password", Config.Password },
                { "path", "****THE HTML PAGE*****" },
                { "protocol", "https" },
                { "query", String.Empty },
                { "redirectProtocol", String.Empty },
                { "useRedirectOnSuccess", "0" },
                { "x", "134" },
                { "y", "15" } };

            byte[] postDataBytes = builder.Build(Encoding.UTF8);
            request.ContentLength = postDataBytes.Length;

            using (Stream stream = request.GetRequestStream())
            {
                stream.Write(postDataBytes, 0, postDataBytes.Length);
            }

            return (HttpWebResponse)request.GetResponse();
        }


        private HttpWebResponse FinalStepGetReportData(HttpWebResponse response, string referer)
        {
            request = (HttpWebRequest)HttpWebRequest.Create(response.Headers["Location"]);
            request.Accept = "image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
            request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)";
            request.ContentType = "text/xml; encoding='utf-8'";
            request.Method = HttpMethod.GET.ToString();
            request.Referer = referer;
            request.KeepAlive = true;
            request.ProtocolVersion = HttpVersion.Version10;
            request.Headers.Add(HttpRequestHeader.Cookie, response.GetResponseHeader("Set-Cookie"));
            System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();

            NameValueCollection headers = new NameValueCollection()
            {
                {"Accept-Language", "en-us,en;q=0.5" },
                {"Cache-Control", "no-cache" },
                {"Accept-Encoding", "deflate"},
            };

            request.Headers.Add(headers);
            return (HttpWebResponse)request.GetResponse();
        }

Ответы [ 3 ]

1 голос
/ 26 июня 2009

Какое именно исключение вы получаете? Распространенной проблемой здесь является забывание вызова. Закройте ответ, когда закончите его читать.

Более старые версии Fiddler закрывали клиентские подключения по умолчанию, что решало некоторые проблемы с клиентами, которые сами не закрывали потоки ответов должным образом.

0 голосов
/ 15 октября 2009

У меня точно такая же проблема, и это потому, что я оставил один ответ, не закрывая его, как вы упомянули.

0 голосов
/ 23 июня 2009

На взломанном сайте нашел интересную статью, в которой он столкнулся с проблемами при публикации данных формы с использованием HTTP 1.1. Стоит попробовать ...

http://haacked.com/archive/2004/05/15/http-web-request-expect-100-continue.aspx

//try this or the other solutions given in the comments
request.ServicePoint.Expect100Continue = false; 
...