Как сделать POST-запрос к Хабру с параметрами на Android'e? Даже не столько на андроиде, сколько с помощью Java.
Пытаюсь реализовать запрос на добавление в избранное поста или вопроса. Проследил как происходит подобный запрос в браузере — с помощью jQuery.post() с параметрами:
$.post({
url: '/json/favorite',
data: {tt: target_type, ti: target_id, action: action},
function(json){
// Обработка результата
},
'json'
});
Пытаюсь передавать подобный запрос двумя способами: с помощью Jsoup и средствами Apache (пакет org.apache.http.client).
Jsoup:Connection.Response response = Jsoup.connect("http://habrahabr.ru/json/favorites/")
.header("Content-Type","application/x-www-form-urlencoded;charset=UTF-8")
.ignoreContentType(true)
.cookie(User.PHPSESSION_ID, cookie1)
.cookie(User.HSEC_ID, cookie2)
.data("tt", targetType)
.data("ti", Integer.toString(targetId))
.data("action", "add")
.method(Connection.Method.POST)
.execute();
Log.i(Utils.TAG_MINE, "Response: " + response.parse().text());
Через Apache:HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://habrahabr.ru/json/favorites/");
httppost.setHeader("Content-type", "application/x-www-form-urlencoded");
httppost.setHeader("Accept", "application/json");
httppost.addHeader("Cookie", " PHPSESSID=" + cookie1 + "; hsec_id=" + cookie2);
List<NameValuePair> params = new ArrayList<NameValuePair>(3);
params.add(new BasicNameValuePair("tt", targetType));
params.add(new BasicNameValuePair("ti", Integer.toString(targetId)));
params.add(new BasicNameValuePair("action", "add"));
httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
// Обработка ответа
В обоих случаях возвращается один и тот же результат:
{"system_errors":[["Действие не определено"],"Объект указан неверно","Тип объекта указан неверно"]}
, что означает что параметры tt, ti, action не были переданы или обработаны. Такой же результат можно получить если отправить из консоли в браузере запрос:
$.post('/json/favorites/', {}, function(json){console.log(json)})
Но параметры ведь должны передаваться обоими методами без проблем. Для тестирования я даже запустил локальный сервер, написал на нем метод с параметрами и обращался к этому методу как из браузера, так и с девайса — в обоих случаях параметры передавались нормально.
Пробовал экспериментировать с хедерами и посылал те же, что из посылаются через браузер при нормальном запросе — результата нет.
Не понимаю куда копать дальше.