[英]HTTP Request works in postman but doesn't work in code
我正在嘗試訪問一個需要通過表單登錄的網站。 我使用了Postman HTTP客戶端。
我嘗試執行正常的http post請求,但似乎沒有用,我獲得了成功的狀態碼(200 OK),但沒有登錄,最終可以處理帶有BODY參數的GET請求(我沒有看到帶有主體參數的GET請求)。 好吧,我嘗試用C#代碼模擬此請求,但是沒有運氣,甚至嘗試了Postman提供的生成代碼,但沒有運氣。 下面是Postman請求和基於自動生成的Postman代碼的C#代碼段。 有人知道是否可以通過任何庫提出此請求,或者是否有我想念的東西?
先感謝您。
var client = new RestClient("https://thessalia-3.teilar.gr/login.asp");
var request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("Referer", "https://thessalia-3.teilar.gr/login.asp");
var parameters = new Dictionary<string, string>();
parameters["userName"] = JsonConvert.SerializeObject("myusername");
parameters["pwd"] = JsonConvert.SerializeObject("mypass");
parameters["loginTrue"] = JsonConvert.SerializeObject("extravalue");
var content = new FormUrlEncodedContent(parameters);
request.AddParameter("application/x-www-form-urlencoded", content);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Console.WriteLine(response.StatusCode);
編輯:
我也嘗試運行此程序,但也未登錄。 自動生成的代碼形式Postman
如果請求成功(200),並且您獲得了“無效憑據”的HTML頁面,那么發出請求的代碼應該很好,並且問題出在憑據上。 就像我在第一條評論中所說的那樣,不要將參數序列化為JSON,而是對其進行URL編碼:
parameters["userName"] = HttpUtility.UrlEncode("myusername");
parameters["pwd"] = HttpUtility.UrlEncode("mypass");
parameters["loginTrue"] = HttpUtility.UrlEncode("extravalue");
這是標准方法,它可以直接將參數寫入請求流,也可以使用實用程序類(如StringContent
。 但是,由於您使用的是實用程序類FormUrlEncodedContent
,它會為您對其進行URL編碼,因此您不必這樣做。 在這種情況下,只需將它們直接分配為字符串即可:
parameters["userName"] = "myusername";
parameters["pwd"] = "mypass";
parameters["loginTrue"] = "extravalue";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.