2017-10-04 64 views
1

我有WooCommerce提供捲曲命令:捲曲在.NET應用程序

curl https://example.com/wp-json/wc/v2/orders \ 
-u consumer_key:consumer_secret 

我使用Web客戶端:

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:無法從傳輸連接讀取數據:現有連接被遠程主機強制關閉。

我在這裏做了什麼錯?我很確定我的網址和密鑰是正確的。

編輯:剛纔想這是建議的CmdrTchort和大衛:

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_key:consumer_secret應該如何表示在這個請求。有兩個值:consumer_key和consumer_secret(之前我只提供了consumer_secret,我放在keyValue的位置)。我現在假設它應該是這樣的形式:

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

其中「consumer_key」和「consumer_secret」表示提供的唯一值。這不起作用。這開始變得有點刺激。

+0

由於錯誤信息,它看起來像證書或SSL/TLS版本問題或不匹配 – Pac0

+2

你的處理提到你有他們提供的cURL命令,但是你是否已經通過WebClient嘗試點擊工作站來測試它?這可能有助於更好地隔離問題,以確定cURL是否出現同樣的問題,並指導您確定是否應該查看自己的代碼或您與Web服務之間的某些內容。 –

回答

0

您正在發佈consumer_key:consumer_secret作爲POST表單的一部分,但這不是cURL的工作內容。這看起來更像是一個提供認證的GET請求。也許是這樣的:

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

然後做一個GET請求,而不是一個POST。沒有值的上傳,那部分可能會被簡化。也許類似於:

string responsebody = wc.DownloadString(url); 
+0

謝謝,但仍收到相同的錯誤(見後期編輯) – Dom

+0

@Dom:您已確認捲曲命令本身是成功的?如果什麼都行不通,那麼你可能需要與供應商聯繫。 – David

0

-u在curl中將憑據作爲授權標頭傳遞,而不是作爲params的字典傳遞。

您可以添加您的憑據:

wc.UseDefaultCredentials = true; 
wc.Credentials = new NetworkCredential("username", "password"); 

是您的服務響應和/或者是不可信或自簽名的證書? 如果是這樣,您可以測試忽略SSL警告。

順便說一下,curl使用默認獲取(-X指定方法,我在你的例子中看不到) - 所以我假設你只接收默認情況下並沒有實際發佈值?如果是這樣,你可以直接使用DownloadString()。

所以,如果你想從以下網址的文件,你可以這樣做:

// 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"); 
} 
+0

已經試過你的例子(是一個GET請求,我的錯誤),但仍然得到相同的錯誤。 – Dom

+0

您的SSL證書有任何問題?在這種情況下測試上述方法。如果沒有 - 你應該檢查你的服務/訂單是否仍然在從瀏覽器或類似的請求時工作。 – CmdrTchort