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

时间:2018-12-21 21:08:13

标签: c# httprequest postman

我正在尝试访问一个需要通过表单登录的网站。 我使用了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 Photo

编辑:

Postman Request Body Parameters

我也尝试运行此程序,但未登录。 Auto-generated code form Postman

1 个答案:

答案 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";