簡體   English   中英

c#如何從重定向的POST獲得響應

[英]c# How do I get response from a redirected POST

我試圖在c#中自動執行一系列手動瀏覽器操作。 手動執行時,每個POST返回的數據將用作下一步輸入的一部分。 序列中有一步重定向POST,我無法弄清楚如何從重定向URL獲取響應。 當我嘗試直接獲得響應時,它不是我期望的數據。

手動順序如下:1輸入URL 2登錄屏幕出現3使用用戶名和密碼登錄4顯示數據驗證屏幕5輸入要驗證的數據6屏幕顯示數據是有效還是無效7輸入下一個要驗證的數據項8等

使用Fiddler,我捕獲了手動過程。 它在Login和Data Validation條目之后顯示GET和響應。 登錄POST及其直接響應和隨后的GET及其響應如下所示。 關於POST和GET的提琴手報告

我一直使用的代碼接收POST的直接響應(重定向),但我無法從重定向URL獲得響應。 當我嘗試直接GET到重定向URL時,響應不正確 - 可能是因為它不知道通過原始POST URL完成的登錄。 編輯:我正在使用的代碼如下所示:

            //Set up the Org Login request
        request = (HttpWebRequest)WebRequest.Create(new Uri("http://XXXXX.com/TEGMemberValidator/Login.aspx"));
        request.MaximumAutomaticRedirections = 2;
        request.AllowAutoRedirect = true;
        request.Credentials = CredentialCache.DefaultCredentials;
        request.Referer = "http://XXXXX.com/TEGMemberValidator/Login.aspx";
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded; text/html; charset=UTF-8";
        request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36";
        //

        //Format the Login POST data
        postData.Clear();
        postData.Append("ScriptManager1=udpnlLogin%7CbtnValidate&__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=");
        postData.Append("%2FwEPDwUKLTE5Mzc1ODY1NmRkfiRRWZ9cUsSkYH3z3n3tW2bdIGBeBZ96JphXMbwpaCo%3D");
        postData.Append("&__VIEWSTATEGENERATOR=");
        postData.Append("5DC834FA");
        postData.Append("&__EVENTVALIDATION=");
        postData.Append("%2FwEdAARHCUjxJ4MNTYwQE%2FK64jes1VXLCZniQEihPDabNrSt9O4sciJO3Hoc68xTFtZGQEiR8T6B3KIlDquMkIoIE61UvzPtKfVQxeZYOtAXnLPv6Ga6a%2FxuXlTLUAOPNsPArMY%3D");
        postData.Append("&name=");
        postData.Append(xnamex);
        postData.Append("&password=");
        postData.Append(xpasswordx);
        postData.Append("&__ASYNCPOST=true&btnValidate=Login");

        //write the Login POST data to the stream
        using (StreamWriter writer = new StreamWriter
          (request.GetRequestStream()))
            writer.Write(postData.ToString());

        response = (HttpWebResponse)request.GetResponse();

        //Get the response to the POST
        using (sreader = new StreamReader(response.GetResponseStream()))
        {
            sreturnData = "";
            sreturnData = sreader.ReadToEnd();
        }
        //*************
        Console.WriteLine("start  L L L L L L L L L L L L L");
        Console.WriteLine("Login sreturnData:");
        //Console.WriteLine(Convert.ToString(sreturnData));
        Console.WriteLine(sreturnData);
        Console.WriteLine(response.ResponseUri);
        file.WriteLine(sreturnData);
        file.WriteLine("");
        Console.WriteLine("finish L L L L L L L L L L L L L");
        //*************

        //GET response from redirect address
        WebRequest request2 = WebRequest.Create("http://XXXXX.com/TEGMemberValidator/MemberValidator.aspx");
        request2.Credentials = CredentialCache.DefaultCredentials;
        WebResponse response2 = request2.GetResponse();
        using (sreader = new StreamReader(response2.GetResponseStream()))
        {
            sreturnData = "";
            sreturnData = sreader.ReadToEnd();
        }
        //*************
        Console.WriteLine("0 0 0 0 0 0 0 0 0 0 0 0");
        Console.WriteLine(response2.ResponseUri);
        Console.WriteLine(sreturnData);
        //*************

我的問題/問題是如何從Fiddler能夠捕獲的重定向URL獲得響應?

簡單的解決方案 - 別忘了餅干!

我忘了將.CookieContainer添加到每個Web請求中。 因此,重定向不知道我的登錄已經過驗證,並且在我登錄之前一直將我發回給我,並繼續為我提供相應的響應。

在第一次調用web之前添加CookieContainer CC = new CookieContainer。 為每個請求添加request.CookieContainer = CC。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM