繁体   English   中英

HTTP请求在邮递员中有效,但在代码中不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM