我正在尝试访问一个需要通过表单登录的网站。 我使用了Postman HTTP客户端。
我尝试执行正常的http发布请求,但似乎没有成功,我获得了成功的状态码(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 Request Body Parameters
我也尝试运行此程序,但未登录。 Auto-generated code form Postman
答案 0 :(得分:0)
如果请求成功(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";