2015-04-24 124 views
4

我正在嘗試將支持HTTPS請求的支付服務'Mollie'(http://www.mollie.nl)集成到Java環境中。Java Jersey使用驗證標頭的HTTPS GET請求

至於這個帖子中,我將使用以下請求解釋: 在PHP(因爲我有一個PHP背景)我可以捲曲工作:

$ curl -X GET https://api.mollie.nl/v1/methods \ 
-H "Authorization: Bearer API-KEY" 

其中有一個迴應:

enter image description here

測試來自DHC(或郵差)的請求返回正確的響應。

enter image description here

所以在Java中我使用的是新澤西州庫嘗試訪問請求:

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本地主機服務器上運行Java測試。 但我不明白爲什麼Java請求給出了超時,因爲驗證頭似乎設置正確(至少對我來說)。

我所注意到的是當訪問請求的路徑https://api.mollie.nl/v1/methods時,它顯示一個驗證彈出窗口。

這將是很好的獲得一些有用的提示或有關此問題的信息。 我錯過了什麼嗎?

謝謝!

+1

運行你的java代碼給了我'GET https://api.mollie.nl/v1/methods返回401未授權的響應狀態,所以它看起來不是這個問題。 – Thomas

+0

@ daan.desmedt看起來像服務有問題500是內部服務器錯誤... – brso05

+0

[ConnectException](https://docs.oracle.com/javase/8/docs/api/index.html?爪哇/網/的ConnectException。html)涉及底層的套接字連接,所以我認爲它與授權頭(這是更高級協議的一部分)沒有任何關係。完整的堆棧跟蹤應該清楚地表明,你是否介意發佈它? – Lolo

回答

0

我已解決上述問題。顯然,PROXY服務器阻止了傳出的HTTPS請求。從非代理環境進行測試解決了問題。感謝所有的建議!

+0

所有時間都會發生:/ –

6

考慮到所有的工作正常(我不知道爲什麼它會導致超時),有一件事我看錯你的

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") 

只是移動頭部的方法鏈接解決這個問題。