【发布时间】:2019-02-25 19:58:27
【问题描述】:
我正在尝试找到一种将 curl 命令传输到 C# 的方法。
我需要的是从 api 获取令牌并将其保存到文件 C:\...\x.json\
然后我想将令牌声明为变量,并将其用于另一个 curl POST 请求以获取数据以使用它们。
卷曲:
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# 的新手):
“await”运算符只能在异步方法中使用。考虑使用 'async' 修饰符标记此方法并将其返回类型更改为 'Task'。
curl -v 输出:
- 正在尝试 10.0.0.0...
- TCP_NODELAY 设置
- 已连接到 example.com (10.0.0.0) 端口 443 (#0)
- ALPN,提供 h2
- ALPN,提供 http/1.1
- 成功设置证书验证位置:
- CAfile: C:\Users\lvrabel\Downloads\curl-7.60.0-win64-mingw\curl-7.60.0-win64-mingw\bin\curl-ca-bundle.crt CApath:无
- TLSv1.2 (OUT)、TLS 握手、客户端问候 (1):
- TLSv1.2 (IN)、TLS 握手、服务器问候 (2):
- TLSv1.2 (IN)、TLS 握手、证书 (11):
- TLSv1.2 (IN)、TLS 握手、服务器密钥交换 (12):
- TLSv1.2 (IN),TLS 握手,服务器完成 (14):
- TLSv1.2 (OUT)、TLS 握手、客户端密钥交换 (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,服务器不同意协议
- 服务器证书:
- 主题: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=索尔福德; O=COMODO CA 有限公司; CN=COMODO RSA 域验证安全服务器
- SSL 证书验证正常。
- 上传完全发送:64 个字节中的 64 个
- TLSv1.2 (OUT)、TLS 警报、客户端问候 (1):
【问题讨论】:
-
您的方法签名应如下所示:
static async void Main(string[] args)。您添加async关键字。 -
嗨@Stuart,那我不明白,因为当我更改 Main 方法时出现错误:程序不包含适合入口点的静态 Main 方法
-
您可能想要定义一个任务方法,然后从 Main... 中调用它...
-
@LukášVrábel 检查我的答案,这可能会解决您的问题。