私は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クライアントがブラウザと同じように実行できないような設定があるかどうかを調べます(このエフェクトにサポートチケットを記録しましたが、いずれにせよ)
401は認証が必要であることを意味します。つまり、リクエストに認証Cookieを追加する必要があります。 – Shcherban
'User-Agent'ヘッダを追加してみてください。 – zaitsman
うわー - 私はあなたの両方が意味するものをグーグルにしなければなりませんでしたが、ユーザーエージェントのヘッダーを追加することがトリックでした!コメント@zaitsmanにあれば、どうすればいいですか? – Damo