POST 因数据无效或丢失而失败

问题描述 投票:0回答:1

我正在尝试将数据发送到中描述的端点 https://leonardo.pgxc.pl/doc/direct_upload.html

失败并显示“用户数据无效”。我认为这都可以表明数据丢失或无效。我确定用户和通行证是正确的。

使用像 https://reqbin.com/ 这样的服务效果很好。然后服务器接受用户数据,但由于丢失了一些文件数据而失败,这些数据目前无关紧要。这是这个过程的第二步,对我来说没有任何一步失败。

enter image description here

尝试从用 C# 编写的控制台应用程序执行相同操作,失败并显示“无效用户数据”

await UploadFileAsync("d:\\User\\Downloads\\test.igc", "MYPASS", "MYUSER");

async Task UploadFileAsync(string filePath, string user, string pass)
{
    HttpClient client = new HttpClient();

    string igcData = File.ReadAllText(filePath);

    var url = "http://www.paraglidingforum.com/modules/leonardo/flight_submit.php";

    var formData = new Dictionary<string, string>
        {
            { "user", user },
            { "pass", pass }
        };

    var content = new FormUrlEncodedContent(formData);

    var response = await client.PostAsync(url, content);
    response.EnsureSuccessStatusCode();
    var responseContent = await response.Content.ReadAsStringAsync();

    Console.WriteLine($"Response: {responseContent}"); // >>Invalid user data
}

因为我可以让它通过 reqbin 接受用户数据,所以在从控制台应用程序发送时,我一定不能在表单中设置正确的属性,但我已经尝试了各种方式,但没有任何运气。总是相同的“无效用户数据”,这让我认为服务器没有收到它,因为我确信 id+pw 是正确的。

编辑:此 html 也接受用户,并且仅在文件数据丢失时失败。

<html >   
<body>
    <form action="https://www.paraglidingforum.com/modules/leonardo/flight_submit.php"  method="post"
   enctype="multipart/form-data" >
   
   user:      <input type="text" name="user" value="MYUSER">
      <br>
      pass: <input type="password" name="pass" value="MYPASS">
      <br>
     <input type="submit" value="Send">
    </form>  </body> </html>

我在这里做错了什么明显的事情吗?

c# rest post .net-8.0
1个回答
0
投票

如果您使用 Postman 等方式发送请求,您将看到如下内容:

Postman

因此,一个

POST
请求会立即重定向到
https
,但是,
GET
不是
POST
GET
请求将无法合法地携带主体,因此可能没有任何凭据,因此身份验证失败。

如果您直接发布到

https
网址,
https://www.paraglidingforum.com/modules/leonardo/flight_submit.php
,它会避免重定向并按预期工作。

所以,C# 代码没有任何问题,只是 URL 错误。默认情况下,

HttpClient
将通过默认处理程序的
AllowAutoRedirect
属性进行重定向。

我对 http 重定向的了解不是很多,但它是下一步该去哪里的指示。如果

POST
请求自动转发其包含的数据,这将是一个明显的安全风险,这就是为什么您无法将
POST
重定向到不同 url 上的另一个
POST
,并且会遵循重定向加上
GET
。在此 API 的情况下,它仍然在
GET
端点上响应,但是当您没有向其发送任何凭据时(
GET
请求无法根据规范发送正文),API 的响应就像您已发送没有。

© www.soinside.com 2019 - 2024. All rights reserved.