2017-11-21 11 views
0

私はWoocommerceサイトと小売POSシステムの統合プロジェクトの仲介者です。 POSは、Woocommerceストアと製品を同期しようとしています。サイトにはSLL証明書があるため、すべての通信はSSL経由で行われます。 POSベンダーは、TLS1.2を使用していると私に伝えます。私たちには顧客の鍵と秘密を含むURLがありますので、ここで完全なURLを貼り付けることはできませんが、問題は次のようなものです...HttpClientとWebClientは401エラーを出していますが、ブラウザーで直接リンクします

ブラウザに直接貼り付けた同じURLが正常に動作し、 JSONペイロード.NET WebClientまたはHttpClientと同じURLを使用すると、401 Not Authorizedエラーが返されます。 WebClientを使用した統合テストの例を次に示します。

[Test] 
public void DownloadString_UsingWebClient_ReturnsNonEmptyResponse() 
{ 
    using (var client = new WebClient()) 
    { 
     var response = client.DownloadString("https://demostore.mycompany.com.au/wp-json/wc/v2/settings/tax/woocommerce_prices_include_tax?consumer_key=ck_xxxskeyxxx&consumer_secret=cs_xxxsecretxxx"); 

     Assert.IsNotEmpty(response); 
    } 

} 

また、HttpClientを使用した同様のテストです。

[Test] 
public async Task DownloadString_UsingHttpClient_ReturnsNonEmptyResponse() 
{ 
    using (var client = new HttpClient()) 
    { 
     ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 
     var response = await client.GetStringAsync("https://demostore.mycompany.com.au/wp-json/wc/v2/settings/tax/woocommerce_prices_include_tax?consumer_key=ck_xxxskeyxxx&consumer_secret=cs_xxxsecretxxx""); 

     Assert.IsNotEmpty(response); 
    } 

} 

両方のテストがアサートに決して行かない。繰り返しますが、同じURLをブラウザに貼り付けると、すべてが正常に動作します。私は、セキュリティプロトコルの種類(後者の例のように)を強制することを含め、いくつかの異なることを試しましたが、暗闇の中でちょうどポークです。

ウェブサイトはWordpressの最新バージョンを使用しており、共有されているLinuxホスティング環境にあります。

WebClientとHttpClientに欠けているものがありますか? Webホスティング会社に戻って、.NETクライアントがブラウザと同じように実行できないような設定があるかどうかを調べます(このエフェクトにサポートチケットを記録しましたが、いずれにせよ)

+0

401は認証が必要であることを意味します。つまり、リクエストに認証Cookieを追加する必要があります。 – Shcherban

+0

'User-Agent'ヘッダを追加してみてください。 – zaitsman

+0

うわー - 私はあなたの両方が意味するものをグーグルにしなければなりませんでしたが、ユーザーエージェントのヘッダーを追加することがトリックでした!コメント@zaitsmanにあれば、どうすればいいですか? – Damo

答えて

0

私は通常、何かがブラウザでは動作するが、その外ではないことがわかった。これは、APIが要求にUser-Agentヘッダーがあることに依存していることを示している。

これは、そのAPIの前にリバースプロキシ/ファイアウォールが存在する理由の1つです。

0

企業ネットワークに接続していてブラウザが動作していてもコードが正しく表示されない場合は、WebClientまたはHttpClientインスタンスのプロキシ設定が不足している可能性があります。

通常、私はとUseDefaultCredentials = trueHttpClientHandlerインスタンスをHttpClientに渡します。

+0

企業のネットワークではありませんが、今後の使用のためにこれを置いておきます。ありがとうございます。 – Damo

関連する問題