C# .NET应用程序中的cURL

C# .NET应用程序中的cURL,c#,curl,webclient,C#,Curl,Webclient,我有一个由WooCommerce提供的cURL命令: curl https://example.com/wp-json/wc/v2/orders \ -u consumer_key:consumer_secret 我正在使用WebClient: using (WebClient wc = new WebClient()) { Uri url = new Uri("https://www.myhost.com/wp-json/wc/v2/orders"); System.Coll

我有一个由WooCommerce提供的cURL命令:

curl https://example.com/wp-json/wc/v2/orders \
-u consumer_key:consumer_secret
我正在使用WebClient:

using (WebClient wc = new WebClient())
{
    Uri url = new Uri("https://www.myhost.com/wp-json/wc/v2/orders");
    System.Collections.Specialized.NameValueCollection reqparm = new System.Collections.Specialized.NameValueCollection();
    reqparm.Add("consumer_key", keyValue);

    byte[] responsebytes = wc.UploadValues(url, "POST", reqparm);
    string responsebody = Encoding.UTF8.GetString(responsebytes);
}
但我得到了一个错误:

IOException:无法从传输连接读取数据:远程主机强制关闭了现有连接

我做错了什么?我很确定我的url和密钥是正确的

编辑:根据CmdrTchort和David的建议,您刚刚尝试了以下方法:

using (WebClient wc = new WebClient())
{
    wc.UseDefaultCredentials = true;
    wc.Credentials = new NetworkCredential("consumer_key", keyValue);                
    string responsebody = wc.DownloadString("https://www.myhost.com/wp-json/wc/v2/orders");
}
仍然收到相同的错误

编辑:我怀疑我被提供了无效的凭证,一旦这变得清晰,我将更新

我被授予了错误的证书。然而,这并没有解决问题

我不明白在这个请求中应该如何表示
consumer\u key:consumer\u secret
。有两个值:consumer_key和consumer_secret(我之前只提供了consumer_secret,我将其放在
keyValue
所在的位置)。我现在假设它的形式是:

wc.Credentials = new NetworkCredential("consumer_key", "consumer_secret");

其中,“消费者密钥”和“消费者密钥”表示提供的唯一值。这是行不通的。这开始让人有点恼火。

您正在将
消费者密钥:消费者密钥
作为表单帖子的一部分发布,但cURL并不是这么做的。这看起来更像是带有提供的身份验证的GET请求。也许是这样的:

wc.Credentials = new NetworkCredential("consumer_key", "consumer_secret");
然后发出GET请求而不是POST。由于没有要上传的值,该部分可能会简化。可能是这样的:

string responsebody = wc.DownloadString(url);

您正在将
consumer\u key:consumer\u secret
作为表单帖子的一部分发布,但cURL并不是这么做的。这看起来更像是带有提供的身份验证的GET请求。也许是这样的:

wc.Credentials = new NetworkCredential("consumer_key", "consumer_secret");
然后发出GET请求而不是POST。由于没有要上传的值,该部分可能会简化。可能是这样的:

string responsebody = wc.DownloadString(url);

-curl中的u将凭据作为授权头传递,而不是作为参数字典传递

您可以通过以下方式添加凭据:

wc.UseDefaultCredentials = true; 
wc.Credentials = new NetworkCredential("username", "password");
您的服务是否有响应和/或是不受信任或自签名的证书? 如果是这样,您可以忽略SSL警告进行测试

顺便说一句,curl默认使用get(-X指定方法,在您的示例中我看不到)——所以我假设您只在默认情况下接收值,而不是实际发布值?如果是这样,您可以直接使用DownloadString()

因此,如果您试图从该url获取文件,可以执行以下操作:

// IGNORE ALL SSL Certificates - would not do this in production
ServicePointManager.ServerCertificateValidationCallback =
       new RemoteCertificateValidationCallback(
            delegate
            { return true; }
        );

using (WebClient wc = new WebClient())
{
 wc.UseDefaultCredentials = true; 
 wc.Credentials = new NetworkCredential("consumer_key", keyValue);
 string responsebody = wc.DownloadString("https://www.myhost.com/wp-json/wc/v2/orders");
}

-curl中的u将凭据作为授权头传递,而不是作为参数字典传递

您可以通过以下方式添加凭据:

wc.UseDefaultCredentials = true; 
wc.Credentials = new NetworkCredential("username", "password");
您的服务是否有响应和/或是不受信任或自签名的证书? 如果是这样,您可以忽略SSL警告进行测试

顺便说一句,curl默认使用get(-X指定方法,在您的示例中我看不到)——所以我假设您只在默认情况下接收值,而不是实际发布值?如果是这样,您可以直接使用DownloadString()

因此,如果您试图从该url获取文件,可以执行以下操作:

// IGNORE ALL SSL Certificates - would not do this in production
ServicePointManager.ServerCertificateValidationCallback =
       new RemoteCertificateValidationCallback(
            delegate
            { return true; }
        );

using (WebClient wc = new WebClient())
{
 wc.UseDefaultCredentials = true; 
 wc.Credentials = new NetworkCredential("consumer_key", keyValue);
 string responsebody = wc.DownloadString("https://www.myhost.com/wp-json/wc/v2/orders");
}

由于出现错误消息,看起来像是在处理证书或SSL/TLS版本问题或不匹配。您提到他们提供了cURL命令,但您是否在试图通过WebClient访问的工作站上对其进行了测试?了解cURL是否出现同样的问题可能有助于更好地隔离问题,并指导您是否应该查看自己的代码或您与web服务之间的其他内容。由于错误消息,这看起来像是处理证书或SSL/TLS版本问题或不匹配。您提到您有他们提供的cURL命令,但您是否在试图通过WebClient访问的工作站上测试过它?了解cURL是否出现同样的问题可能有助于更好地隔离问题,并指导您是否应该查看自己的代码或您与web服务之间的其他内容。谢谢,但仍然收到相同的错误(请参阅编辑的帖子)@Dom:您确认cURL命令本身是成功的吗?如果没有任何效果,那么您可能需要与供应商核实。谢谢,但仍然收到相同的错误(请参阅编辑的帖子)@Dom:您确认cURL命令本身成功了吗?如果什么都不起作用,那么您可能需要与供应商核实。您尝试过您的示例(是一个GET请求,我的错误),但仍然得到相同的错误。您的SSL证书有任何问题吗?在这种情况下,测试上述方法。如果没有-从浏览器或类似应用程序请求服务/订单时,您应该检查服务/订单是否仍在工作。您尝试过您的示例(是GET请求,我的错误),但仍然收到相同的错误。您的SSL证书有问题吗?在这种情况下,测试上述方法。如果没有-从浏览器或类似设备请求时,应检查您的服务/订单是否仍然有效。