![](/img/trans.png)
[英]How do I make a POST call from C# that accepts a CSV file as a response?
[英]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.