[英]Java Jersey HTTPS GET request with Authentication header
我正在嘗試將支持服務的“Mollie”( http://www.mollie.nl )集成到Java環境中,該服務通過HTTPS請求工作。
至於這篇文章,我將使用以下請求來解釋:在PHP中(因為我有PHP背景)我可以使用cURL:
$ curl -X GET https://api.mollie.nl/v1/methods \
-H "Authorization: Bearer API-KEY"
哪有回應:
從DHC(或Postman)測試REQUEST返回正確的響應。
所以在Java中我使用Jersey庫來嘗試訪問請求:
Client client = Client.create();
WebResource webResource = client.resource("https://api.mollie.nl/v1/methods");
webResource.header("Authorization", "Bearer API-KEY");
ClientResponse response = webResource
.header("Content-Type", "application/json;charset=UTF-8")
.type("application/json")
.accept("application/json")
.get(ClientResponse.class);
int statusCode = response.getStatus();
if (statusCode == 401) {
throw new AuthenticationException("Invalid Username or Password");
}
String responseCall = response.getEntity(String.class);
執行Java代碼時,請求會拋出ClientHandlerException:
HTTP Status 500 - com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection timed out: connect
我正在從Apache localhost服務器運行Java測試。 但我無法弄清楚為什么Java請求會給出超時,因為身份驗證標頭似乎設置正確(至少對我而言)。
我注意到的是訪問請求的路徑時https://api.mollie.nl/v1/methods它顯示了一個用於身份驗證的彈出窗口。
獲得有關此問題的有用提示或信息會很高興。 我錯過了什么嗎?
謝謝!
鑒於所有的工作正常(我不確定為什么會導致超時),我看錯了一件事是你的用法
webResource.header("Authorization", "Bearer API-KEY");
header
返回WebResource.Builder
,並且不會將標頭添加到當前WebResource
。 因此,您發送的請求沒有標頭。 您可以通過添加LoggingFilter
來檢查它
client.addFilter(new com.sun.jersey.api.client.filter.LoggingFilter(System.out));
你可以通過這樣做解決這個問題
ClientResponse response = webResource
.header("Authorization", "Bearer API-KEY");
.header("Content-Type", "application/json;charset=UTF-8")
只需將標題移動到方法鏈接。
我已經解決了上述問題。 顯然工作PROXY服務器阻止了傳出的HTTPS請求。 從非代理環境進行測試可以解決問題。 謝謝你的建議!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.