c# - 将 POST curl 到 C#

标签 c# curl

我正在尝试找到一种将 curl 命令传输到 C# 的方法。

我需要的是从api获取 token 并将其保存到文件C:\...\x.json\

然后我想将 token 声明为变量,并将其用于另一个 curl POST 请求以获取数据以与它们一起使用。

curl :

curl -X POST "https://example.com" 
-H "accept: application/json" 
-H "Content-Type: application/json" 
-d {"username":"username","password":"password"}

我目前的尝试:

static void Main(string[] args)
{
    using (var httpClient = new HttpClient())
    {
        using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://example.com"))
        {
            request.Headers.TryAddWithoutValidation("Accept", "application/json");

            request.Content = new StringContent("{\"username\":\"username\",\"password\":\"password\"}", Encoding.UTF8, "application/json");

            var response = await httpClient.SendAsync(request);
        }
    }                        
}

我尝试了几种方法,但没有一种起作用。这个来自 curl.olsh.me,但我也遇到了一些等待错误,我不知道如何处理它。 (我是 C# 的新手):

The 'await' operator can only be used within an async method. Consider marking this method with the 'async' modifier and changing its return type to 'Task'.

curl -v 输出:

    • 正在尝试 10.0.0.0...
    • 设置 TCP_NODELAY
    • 连接到 example.com (10.0.0.0) 端口 443 (#0)
    • ALPN,提供 h2
    • ALPN,提供 http/1.1
    • 成功设置证书验证位置:
    • CA 文件:C:\Users\lvrabel\Downloads\curl-7.60.0-win64-mingw\curl-7.60.0-win64-mingw\bin\curl-ca-bundle.crt CA路径:无
    • TLSv1.2 (OUT),TLS 握手,客户端问候 (1):
    • TLSv1.2 (IN)、TLS 握手、服务器问候 (2):
    • TLSv1.2 (IN),TLS 握手,证书 (11):
    • TLSv1.2 (IN)、TLS 握手、服务器 key 交换 (12):
    • TLSv1.2 (IN),TLS 握手,服务器完成 (14):
    • TLSv1.2 (OUT)、TLS 握手、客户端 key 交换 (16):
    • TLSv1.2 (OUT),TLS 更改密码,客户端问候 (1):
    • TLSv1.2 (OUT),TLS 握手,完成 (20):
    • TLSv1.2 (IN),TLS 握手,完成 (20):
    • 使用 TLSv1.2/ECDHE-RSA-AES128-GCM-SHA256 的 SSL 连接
    • ALPN,服务器不同意协议(protocol)
    • 服务器证书:
    • 主题:OU=域控制已验证; OU=PositiveSSL 通配符; CN=*.example.com
    • 开始日期:格林威治标准时间 2016 年 12 月 1 日 00:00:00
    • 到期日:格林威治标准时间 2019 年 12 月 1 日 23:59:59
    • subjectAltName:主机“example.com”匹配证书的“*.example.com”
    • 发行人:C=GB; ST=大曼彻斯特; L= Solr 福德; O=COMODO CA 有限公司; CN=COMODO RSA 域验证安全服务器
    • SSL 证书验证正常。 < POST/cxf/IOTServices/v2/Login HTTP/1.1 < 主机:example.com < 用户代理:curl/7.60.0 <接受:应用程序/json < 内容类型:application/json < 内容长度:64 <
    • 上传完全发送:64 字节中的 64 字节 < HTTP/1.1 200 正常 < 日期:2018 年 9 月 24 日星期一 09:22:30 GMT < 内容类型:application/json < 日期:2018 年 9 月 24 日星期一 09:22:31 GMT <连接:关闭 < 设置 Cookie:TS0119a36f=015d568915873c94e852616fd92d5dd7a03a620f3cd2326781154684dfd7b31302f6fcb9822598d5a76466d0c6a25583fccbb30c7d;路径=/;域名=.example.com < 传输编码:分块 < {"code":200,"status":"success","sessionId":"5cd92d80-bfdb-11e8-83c7-5b742f0c1244"}* 关闭连接 0
    • TLSv1.2 (OUT)、TLS 警报、客户端问候 (1):

最佳答案

使用本网站 https://curl.olsh.me/

using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://example.com/"))
    {
        request.Headers.TryAddWithoutValidation("Accept", "application/json"); 

        request.Content = new StringContent("{\"username\":\"username\",\"password\":\"password\"}", Encoding.UTF8, "application/json"); 

        var response = await httpClient.SendAsync(request);
    }
}

关于c# - 将 POST curl 到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52443196/

相关文章:

c# - 在循环内部与外部定义变量

c# - 是否可以阻止第一个条目在 Xamarin Forms 的 ScrollView 中获得焦点

c# - 是否可以为任何通过最低要求的设备构建 android?

带有 header 和 JSON 数据的 RCurl POST 请求

php - 更改 cURL 中上传文件的名称?

c# - 无法更新 EntitySet 'ItemRankList' 因为它有一个 DefiningQuery 并且不存在 <UpdateFunction> 元素

c# - xml中的可扩展区域

php - ssl 证书问题 : unable to get local issuer certificate xampp

python-2.7 - 将curl示例转换为pycurl

curl - cURL -d。参数