【问题标题】:My POST request fails in c# but works perfectly fine in POSTMAN我的 POST 请求在 c# 中失败,但在 POSTMAN 中工作得很好
【发布时间】:2019-12-27 20:19:43
【问题描述】:

我向本地安装在我的服务器上的 nextcloud 安装发出登录请求。 我传递了 3 个参数:requesttoken、password、shareToken。该请求在邮递员中运行良好,但在我的 C# 代码中失败。

我收到以下回复 带有 412 状态码。

"{\"消息\":\"CSRF检查失败\"}"

我复制粘贴了来自我的邮递员请求的 c# 代码,如下所示。有什么线索吗?

    var client = new RestClient("https://nextcloud.xxxx.org/index.php/s/Sryt58drbe34/authenticate/showShare");
    var request = new RestRequest(Method.POST);
    request.AddHeader("Cache-Control", "no-cache");
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddParameter("undefined", "requesttoken=oq%2Fqo4Nx0eNvYyty5QNeJqPbjZxMCtn3bFvUfEi%2Fwcg%3D%3AlOWrxPECsptWMBwGnTYMQ%2FG3yPENe7iQQwz7EQOLmYA%3D&password=bb9AYoqWSmAxiCgvFusW&sharingToken=Sryt58drbe34", ParameterType.RequestBody);

    IRestResponse response = client.Execute(request);

【问题讨论】:

  • cookie 怎么样?有吗?
  • 使用像提琴手的wireshark这样的嗅探器。捕获来自邮递员的第一个请求并与来自 C# 代码的第一个请求进行比较。使 c# 请求看起来像邮递员。 c#请求中的默认headers与默认postman headers不同。
  • 您是否将令牌放入 x-www-form-urlencoded 内容类型中?如果是这样,您必须将“未定义”替换为“application/x-www-form-urlencoded”

标签: c# post postman csrf


【解决方案1】:

你的帖子应该是这样的

var uri = "https://nextcloud.xxxx.org/index.php/s/Sryt58drbe34/authenticate/showShare"
var requestToken= "oq/qo4Nx0eNvYyty5QNeJqPbjZxMCtn3bFvUfEi/wcg=:lOWrxPECsptWMBwGnTYMQ/G3yPENe7iQQwz7EQOLmYA=";
var password = "bb9AYoqWSmAxiCgvFusW";
var shareToken = "Sryt58drbe34";

var formContent = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("requesttoken", requestToken), 
    new KeyValuePair<string, string>("password", password ),
    new KeyValuePair<string, string>("sharetoken ", shareToken )
});

var myHttpClient = new HttpClient();
var response = await myHttpClient.PostAsync(uri.ToString(), formContent);

【讨论】:

    猜你喜欢
    • 2022-11-17
    • 2016-04-02
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多