2016-01-10 97 views
0

我想連接到另一家公司的API。 從文檔有::發送空的內容與HttpClient

即使你的GET請求,你需要包含Java相當於 curl_setopt($ch, CURLOPT_POSTFIELDS, $content),,你可以設置$data等於 爲空數組。

$content在他們的例子中是一個空的JSON數組。我正在使用org.apache.commons.httpclient

我不知道如何將帖子字段添加到org.apache.commons.httpclient.methods.GetMethod或者甚至可能。

我試圖與2的內容長度,但GET超時僞造(可能尋找,我沒有提供內容。如果我刪除的內容長度我瞭解從API服務器的響應無效)

HttpClient client = new HttpClient(); 
    GetMethod method = new GetMethod("https://api.xxx.com/account/"); 
    method.addRequestHeader("Content-Type", "application/json"); 
    method.addRequestHeader("X-Public-Key", APKey); 
    method.addRequestHeader("X-Signed-Request-Hash", "xxx"); 
    method.addRequestHeader("Content-Length", "2"); 

    int statusCode = client.executeMethod(method); 
+0

如果一個空的JSON數組的預期,不會'[]'這樣的伎倆? – Robert

+0

嘿羅伯特。感謝您的迴應。所以這是一個愚蠢的問題。如何將一個空的JSON數組有效載荷添加到GetMethod? – randy

+0

您是否需要將該空數組作爲URL查詢字符串傳遞? API文檔是否在某處說出該變量的名稱?然後,您會將'&variable =%5B%5D'追加到URL。 (%5B和%5D是百分比編碼的[]')。 – Robert

回答

0

我這是怎麼解決這個問題

創建此類

public class HttpGetWithEntity extends HttpEntityEnclosingRequestBase { 
    public HttpGetWithEntity() { 
     super(); 
    } 
    public HttpGetWithEntity(URI uri) { 
     super(); 
     setURI(uri); 
    } 
    public HttpGetWithEntity(String uri) { 
     super(); 
     setURI(URI.create(uri)); 
    } 
    @Override 
    public String getMethod() { 
     return HttpGet.METHOD_NAME; 
    } 
} 

然後調用函數看起來像

public JSONObject get(JSONObject payload, String URL) throws Exception { 

    JSONArray jsonArray = new JSONArray(); 
    CloseableHttpClient client = HttpClientBuilder.create().build(); 

    HttpGetWithEntity myGet = new HttpGetWithEntity(WeeblyAPIHost+URL); 
    myGet.setEntity(new StringEntity("[]")); 
    myGet.setHeader("Content-Type", "application/json"); 
    myGet.setHeader("X-Public-Key", APIKey); 
    HttpResponse response = client.execute(myGet); 

    JSONParser parser = new JSONParser(); 
    Object obj = parser.parse(EntityUtils.toString(response.getEntity(), "UTF-8")) ; 
    JSONObject jsonResponse = (JSONObject) obj; 

    return jsonResponse; 

} 
0

我不認爲GetMethod包括附加請求正文的任何​​方法,因爲GET請求不應該有一個正文。 (但是實際上並沒有禁止使用身體 - 請參閱:HTTP GET with request body。)

您正在嘗試使用以不同語言編寫的文檔以及不同的客戶端庫,因此您必須使用試用版並有一點錯誤。這聽起來像他們期待一個沒有身體的請求,而你已經有了這個請求。有沒有很好的理由,爲什麼他們會需要一個「內容長度」用GET,但如果是這樣的情況下,嘗試將其設置爲0。