Использование HttpGet для возврата полного HTML-кода

Я пытаюсь вызвать частный веб-сервис, в котором есть одна ссылка, к которой я должен получить доступ, используя метод 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;
}

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


person noob    schedule 21.03.2012    source источник
comment
какой контент, если вы попытаетесь получить URL-адрес с помощью браузера или завитка   -  person Blackbelt    schedule 21.03.2012
comment
это строка json, если я попытаюсь вызвать ее через браузер, что и должно быть на Android.   -  person noob    schedule 21.03.2012


Ответы (1)


Попробуйте указать 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");
person yorkw    schedule 21.03.2012