【问题标题】:Convert Postman code to regular C# code将 Postman 代码转换为常规 C# 代码
【发布时间】:2021-09-25 16:31:25
【问题描述】:

var client = new RestClient("https://seller.digikala.com/Account/Login");
var request = new RestRequest(Method.POST);
request.AddHeader("postman-token", "0e4d8dba-29da-0b26-1b43-1bf974e9b5de");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
IRestResponse response = client.Execute(request);

我可以在邮递员中成功发送请求并登录到站点,但我不能在 VS 中这样做。这是我在 VS 中的代码:

var client = new RestClient("https://seller.digikala.com/Account/Login");

var request = new RestRequest(Method.POST);
request.AddParameter("IsPersistent", true, ParameterType.GetOrPost);
request.AddParameter("Password", "myPass", ParameterType.GetOrPost);
request.AddParameter("UserName", "myUsername", ParameterType.GetOrPost);
request.AddParameter("returnUrl", "/Account/Login", ParameterType.GetOrPost);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/x-www-form-urlencoded");

IRestResponse response = client.Execute(request);

但我在 VS 中收到“未经授权”消息 (401)

【问题讨论】:

  • 有什么错误吗?信息性消息返回?
  • @andrewb 我无法在 vs. 中做到这一点并获得未经授权的消息 (401)
  • 为 VS 和 Postman 运行 fiddler 跟踪并检查负载差异。
  • 只是一个想法,尝试在 C# 代码中添加一个 User-Agent 标头。

标签: c# visual-studio postman


【解决方案1】:

我相信您的问题是您正在添加应该作为身体一部分的东西作为参数(基于 PostMan 的屏幕截图显示这些项目作为身体的一部分)。这未经测试,但可能对您有用。

var client = new RestClient("https://seller.digikala.com/Account/Login");
var request = new RestRequest(Method.POST);
request.AddBody(new
{
    IsPersistant = true,
    Password = "myPass",
    UserName = "myUsername",
    returnUrl = "/Account/Login"
});
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
IRestResponse response = client.Execute(request);

【讨论】:

  • 当 request.AddBody 命中“名称不能以 '
  • 具体发生在哪里?听起来您传递的字符无效。
  • 当 addBody 命中时。但在 addBody 修复此错误之前添加request.RequestFormat = DataFormat.Json;。虽然我得到 401 错误。
【解决方案2】:

您可以使用 PostMan Auto C# 代码生成器

【讨论】:

    【解决方案3】:

    您可能需要先对页面进行GET,然后在制作时POST 反射回在GET 期间收到的所有cookie(如果您的RestClient 没有自动执行此操作)。

    登录页面通常会在 GET 期间添加一个 cookie,并希望在 POST 期间使用该 cookie 来防止 XSRF(这涉及将相同的令牌包含为表单的隐藏字段,尽管 XSRF 令牌显然不存在于您的 Postman 有效负载中)。即使在您的请求到达登录控制器/中间件之前,某些基于 cookie 的 sessionID 过滤器也会阻止您,这也不会让我感到惊讶。在任何情况下,先执行 GET,然后在 POST 中反映 cookie 应该可以工作。

    【讨论】:

    • 但我使用邮递员拦截器跟踪登录,表单中没有任何防伪令牌字段。
    • 可能是这样,我什至说过你的 Postman 截图没有显示一个,但其他 cookie 可能仍然很重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    相关资源
    最近更新 更多