用 C# 编写的 curl 请求不起作用

本文关键字:curl 请求 不起作用 | 更新日期: 2023-09-27 18:31:54

我正在尝试用 C# 编写特定的 curl 请求,并且不断收到来自服务器的 500 服务器错误响应。这个 curl 请求本质上是由 Highwinds 公司向 API 发出后请求的。此请求发送 json 数据,并设置身份验证持有者令牌标头。

这是工作正常的 curl 请求(请注意,我已将我的实际持有者令牌替换为 {token},将我的实际帐户 ID 替换为 {accountId} 以混淆该信息):

curl -H "Authorization: Bearer {token}" -H "Content-Type: application/json" -d "@data.json" "https://striketracker.highwinds.com/api/accounts/{accountId}/purge"

下面是 C# 代码,它从 Highwinds API 中为我提供了一个通用的 500 服务器错误(请注意,我已将我的实际持有者令牌替换为 {token},将我的实际帐户 ID 替换为 {accountId},并将 json 字符串中的 url 替换为 {url},以便混淆该个人信息):

var accountId = "{accountId}";
var purgeURI =  string.Format("https://striketracker.highwinds.com/api/accounts/{0}/purge", {accountId});
var query =
@"{""list"": [{""url"": ""{url}"",""recursive"": true}]}";
var token = {token};

using (var httpClient = new HttpClient())
{
var url = new Uri(purgeURI);
using (var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, url))
{
    httpRequestMessage.Headers.Add(System.Net.HttpRequestHeader.Authorization.ToString(),
      string.Format("Bearer {0}", token));
    httpRequestMessage.Content = new StringContent(query,
                Encoding.UTF8,
                "application/json");
    await httpClient.SendAsync(httpRequestMessage).ContinueWith(task =>
    {
        var response = task.Result;
        var blah = response.Content.ReadAsStringAsync().Result;
        Console.WriteLine(response.Content.ReadAsStringAsync().Result);
    });
}
}

谢谢!

*更新:添加了以下代码行以删除 HttpRequest 默认添加到请求的 Expect 标头。删除此标头后,我能够让Highwinds API接受请求而不会轰炸。

"请求。ServicePoint.Expect100Continue = false;"

用 C# 编写的 curl 请求不起作用

我最好的建议是通过 tcpmon http://archive.apache.org/dist/ws/tcpmon/1.0/之类的东西代理这两个请求(基本上运行服务器并指向本地主机并让 tcpmon 将请求重定向到 striketracker.highwinds.com)。 从 curl 和源尝试一下,您应该能够看到请求之间的不同之处。