Использование HttpGet, возвращающего полный HTML-код - PullRequest
1 голос
/ 21 марта 2012

Я пытаюсь вызвать частный веб-сервис, в котором есть одна ссылка, к которой я могу получить доступ, используя метод GET. При использовании прямого URL в браузере (сначала необходимо войти в систему), я получаю данные в формате JSON. URL-адрес, который я вызываю, выглядит следующим образом

 http://www.example.com/trip/details/860720?format=json

URL-адрес работает нормально, но когда я вызываю его с помощью HttpGet, я получаю HTML-кодирование веб-страницы вместо строки JSON. Код, который я использую, выглядит следующим образом:

private String runURL(String src,int id) {   //src="http://www.example.com/trip/details/"
    HttpClient httpclient = new DefaultHttpClient();   
    HttpGet httpget = new HttpGet(src); 
    String responseBody="";
        BasicHttpParams params=new BasicHttpParams();
        params.setParameter("domain", token); //The access token I am getting after the Login
        params.setParameter("format", "json");
        params.setParameter("id", id);
        try {
                httpget.setParams(params);
                HttpResponse response = httpclient.execute(httpget);
                responseBody = EntityUtils.toString(response.getEntity());
                Log.d("runURL", "response " + responseBody); //prints the complete HTML code of the web-page
            } catch (Exception e) {
                e.printStackTrace();
        } 
        return responseBody;
}

Можете ли вы сказать мне, что я здесь не так делаю?

1 Ответ

6 голосов
/ 22 марта 2012

Попробуйте указать Accept & Content-Type в заголовке http:

httpget.setHeader("Accept", "application/json"); // or application/jsonrequest
httpget.setHeader("Content-Type", "application/json");

Обратите внимание, что вы можете использовать такие инструменты, как wireshark , собирать и анализировать http-пакет доходов и результатов, а также определять точный стиль заголовка http, который возвращает ваш ответ json из стандартного браузера.

Обновление:
Вы упомянули, что сначала нужно использовать логин при использовании браузера, возвращаемое html-содержимое, вероятно, является страницей входа (если используется базовый тип аутентификации, он возвращает короткий html-ответ с кодом состояния 401, поэтому современный браузер знает, как обрабатывать, более конкретно, всплывающее окно приглашение пользователя), поэтому первой попыткой будет проверка кода состояния вашего ответа http:

int responseStatusCode = response.getStatusLine().getStatusCode();

Зависит от того, какой тип аутентификации вы используете, вам, вероятно, нужно будет также указать учетные данные для входа в ваш http-запрос, что-то вроде этого (если это обычная аутентификация):

httpClient.getCredentialsProvider().setCredentials(
  new AuthScope("http://www.example.com/trip/details/860720?format=json", 80), 
  new UsernamePasswordCredentials("username", "password");
...