2016-01-10 3 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, или если это возможно.

я пытался притворяюсь с Content-Length 2, но времен Геть (вероятно, в поисках контента, который я не обеспечиваю. Если я удалить содержимое длину я получаю недопустимый ответ от сервера 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.)

Вы пытаетесь использовать документацию, написанную на другом языке и в другой клиентской библиотеке, поэтому вам придется использовать пробную версию и ошибка немного. Похоже, они ожидают запроса без тела, и у вас уже есть это. Там нет никаких причин, почему они требуют «Content-Length» с ГЭТ, но если это так, то попробуйте установить его в 0.

Смежные вопросы