如何将curl请求转换为HttpClient

Son*_*nja 5 .net c# curl dotnet-httpclient asynchttpclient

我有一个如下所示的卷曲请求:

curl -i -XPOST 'http://my_url:port/write?db=myDb' -u user:xxxxx --data-binary 'FieldName,host=M.233 value=52.666 timestamp'
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 HttpClient 发布此请求。我不确定应该如何称呼它。这就是我试图做的:

public async void  TestHttpClient()
{ 
    var client = new HttpClient();
    var credentials = Encoding.ASCII.GetBytes("user:xxxxx");
    var header = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(credentials));
    client.DefaultRequestHeaders.Authorization = header;
    client.BaseAddress = new Uri("http://my_url:port/write?db=myDb");
    var result = await client.PostAsync(..);
}
Run Code Online (Sandbox Code Playgroud)

我应该为 PostAsync() 编写哪些参数?

如何从curl 转换--data-binaryFieldName,host=M.233 value=52.666 timestampHttpClient?

tim*_*thy 5

有一个可爱的curl 到c# 转换器,它将使用HTTPClient 将您的curl 脚本转换为C# 代码。https://curl.olsh.me/

使用这个工具和你的curl脚本我们得到以下结果。

using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("POST"), "http://http//my_url:port/write?db=myDb"))
    {
        var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("user:xxxxx"));
        request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}"); 

        request.Content = new StringContent("FieldName,host=M.233 value=52.666 timestamp");
        request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded"); 

        var response = await httpClient.SendAsync(request);
    }
}
Run Code Online (Sandbox Code Playgroud)


Son*_*nja 4

我的解决方案是:

public async Task TestHttpClient()
{ 
    var client = new HttpClient();
    var credentials = Encoding.ASCII.GetBytes("user:xxxxx");
    var header = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(credentials));
    client.DefaultRequestHeaders.Authorization = header;
    String url = "http://my_url:port/write?db=myDb";
    String content = "FieldName,host=M.233 value=52.666 timestamp";
    StringContent stringContent = new StringContent(content);
    var result = await client.PostAsync(url, stringContent);
}
Run Code Online (Sandbox Code Playgroud)