Httpclient / JSONObject - PullRequest
       20

Httpclient / JSONObject

3 голосов
/ 16 февраля 2012

Я пытаюсь автоматически отправить JSONObject.Я получаю reposnse как 302 Moved Временно, что означает, что я должен перенаправить на другой URL.Но мой response.toString () показывает «Расположение: /».Ниже приведен код.

String input_text = "https://www.hautelook.com/v3/credential";
HttpPost httpost = new HttpPost(input_text);
String data =  "{\"screen_resolution\":{\"height\":1080,\"width\":1920}}";

JSONObject jo=new JSONObject();
jo.put("email","sfhgfjk");
jo.put("passsword","dfjhsdkj");
jo.put("meta",data);

StringEntity se = new StringEntity( "JSON: " + json.toString());  
se.setContentEncoding("UTF-8");
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httpost.setEntity(se);

HttpResponse  response = httpclient.execute(httpost);
entity  = response.getEntity();

Что будет не так?

Это ответ.

response HTTP/1.1 302 Moved Temporarily [Server: nginx, Content-Type: text/html,
 Location: /, Content-Encoding: gzip, Content-Length: 20, Expires: Thu, 16 Feb 2
012 19:07:55 GMT, Cache-Control: max-age=0, no-cache, no-store, Pragma: no-cache
, Date: Thu, 16 Feb 2012 19:07:55 GMT, Connection: keep-alive, Set-Cookie: PHPSE
SSID=vmoqeksits8ccukvnf7k4rdv75; path=/]

Ответы [ 4 ]

2 голосов
/ 16 февраля 2012

Вы всегда можете проверить правильность этого вручную, отправив запрос через CURL или даже через браузер. Например, ввод https://www.hautelook.com/v3/credential в адресной строке браузера приводит к перенаправлению на https://www.hautelook.com (при этом jQuery показывает небольшой диалог входа в систему). Таким образом, вы знаете, по крайней мере, что поведение является последовательным.

Это может означать одну из нескольких вещей:

  • Конечная точка, которую вы используете, неверна (вероятно, это не случай)
  • Указанная вами неверная информация для аутентификации (также маловероятно, потому что мы ожидаем, что 401 несанкционированный в этом случае)
  • Неверный способ передачи информации об аутентификации.

Трудно сказать, не зная больше об API, но вам следует снова обратиться к документации, чтобы убедиться, что вы делаете вызов правильно.


* РЕДАКТИРОВАТЬ *

Хорошо, протестировано с клиентом REST, и в вашем коде есть несколько вещей, которые нужно исправить:

  • Измените 'пароль' на 'пароль'
  • Изменить строку:

Оригинал:

new StringEntity( "JSON: " + json.toString())

Кому:

new StringEntity(json.toString())

Это должно разрешить запрос, хотя я все еще не уверен, что это правильная конечная точка, так как я возвращаю HTML-страницу. И последнее: всегда полезно удалить свои учетные данные API перед публикацией кода в SO. Я включаю скриншот запроса ниже:

enter image description here

1 голос
/ 17 февраля 2012

Стратегия перенаправления по умолчанию, используемая HttpClient 4.x, учитывает ограничения на автоматическое перенаправление методов, включающих объекты, такие как POST и PUT, наложенные спецификацией HTTP.В соответствии с требованиями спецификации HTTP коды состояния 302 Moved Temporarily, 301 Moved Permanently и 307 Temporary Redirect не могут обрабатываться автоматически для методов POST и PUT без явного подтверждения пользователем.

HttpClient 4.2 может быть настроен для использованияLaxRedirectStrategy, который обрабатывает все типы перенаправлений автоматически, независимо от ограничений, налагаемых спецификацией.В более ранних версиях можно реализовать собственную стратегию перенаправления, как описано здесь: Httpclient 4, ошибка 302. Как перенаправить? (как предложил Боб Кухар).

В то же время я должен сказать, что заголовок 'Location: /' выглядит несколько подозрительно, и даже автоматическое перенаправление в это место не обязательно приведет к желаемому эффекту.

0 голосов
/ 16 февраля 2012

Вы можете просто настроить свой HTTPClient для следования перенаправлениям.До 4.x это был просто метод HTTPMethod.Добавьте ...

HttpPost httpost = new HttpPost(input_text);
httpost.setFollowRedirect( true );

... но это было недостаточно чисто или что-то в этом роде, и они изменили его в 4.x.С тех пор я не пробовал, поэтому неохотно отправлять код.Но этот вопрос возник и здесь уже был дан ответ.Может это тебе поможет? Httpclient 4, ошибка 302. Как перенаправить?

0 голосов
/ 16 февраля 2012

ответ HTTP / 1.1 302 Перемещено Временно означает, что произошло некоторое перенаправление.

Один из примеров: «Единый вход в систему» ​​(или) Требуется авторизация.Без авторизационного куки при попытке доступа к ресурсу с помощью URL вы можете быть перенаправлены для авторизации с ответом 302.

...