@Alepan

Как передать параметры в GET запросе HTTPUrlConnection?

Здравствуйте!

Сайт www.umori.li предоставляет REST API с помощью которого можно получать список цитат. Например, ответом на запрос "www.umori.li/api/get?site=bash.im&name=bash&num=100" будет JSON-массив со 100 цитатами. Для начала изучения REST я решил использовать HttpURLConnection, а потом уже приступать к retrofit, но тут же столкнулся с проблемой. Вместо этих 100 цитат я получаю следующее:
<html><head><title>www.umori.li</title></head><frameset BORDER='0' frameborder='0' framespacing='0' rows='100%,*'>
                                                                     <frame name='target' src='http://umorili.herokuapp.com/api/get?site=bash.im&name=bash&num=100'>
                                                                     <noframes>  <body BGCOLOR='#FFFFFF'>
                                                                     This page requires that your browser supports frames.
                                                                     <BR>You can access the page without frames with this <a href='http://umorili.herokuapp.com/api/get?site=bash.im&name=bash&num=100'>link</A>.
                                                                     </body></noframes></frameset></html>


Хотя если ввести в браузере строку "www.umori.li/api/get?site=bash.im&name=bash&num=100", то можно будет увидеть тот самый JSON-массив с цитатами. Не совсем понимаю в чем может быть ошибка, но думаю, что неправильно передаются параметры.

Код класса:
import android.util.Log;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;

public class RestHelper extends Thread {

    URL url;
    HttpURLConnection httpURLConnection;

    @Override
    public void run() {
        BufferedReader in = null;
        StringBuilder buf;
        String urlString = null;

        try {
            url = new URL("http://www.umori.li/api/get?site=bash.im&name=bash&num=100");
            httpURLConnection = (HttpURLConnection)url.openConnection();
        } catch (MalformedURLException e) {
            Log.i("REST", "MalformedURLException");
        } catch (IOException e) {
            Log.i("REST", "IOException");
        }

        try {
            httpURLConnection.setRequestMethod("GET");
            httpURLConnection.setConnectTimeout(10000);
            httpURLConnection.setDoInput(true);
            httpURLConnection.setDoOutput(true);
            httpURLConnection.connect();
        } catch (ProtocolException e) {
            Log.i("REST", "ProtocolException");
        } catch (IOException e) {
            Log.i("REST", "IOException");
        }

        buf = new StringBuilder();
        try {
            in = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
            String line = null;
            while ((line = in.readLine()) != null) {
                buf.append(line + "\n");
            }
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Log.i("REST", "INPUT DATA:" + buf.toString());

        httpURLConnection.disconnect();
    }
}
  • Вопрос задан
  • 1698 просмотров
Решения вопроса 2
@Alepan Автор вопроса
Разобрался )
Может кому пригодится
1. Нужно убрать httpURLConnection.setDoOutput(true); т.к. он используется только при POST запросах
2. По "www.umori.li/api/get?site=bash.im&name=bash&num=100" он возвращает страницу с фреймами в которых лежат цитаты. Т.к. у меня не поддерживаются фреймы, мне возвращается только код страницы. Чтобы получать чистый JSON, нужно использовать "umorili.herokuapp.com/api/get?site=bash.im&name=ba..." (что в принципе он и писал мне в ответе).
Ответ написан
a13xsus
@a13xsus
Lazy developer
Дык тебе в ответе рекомендуют эту ссылку юзать: umorili.herokuapp.com/api/get?site=bash.im&name=ba...
То же самое, только для клиентов без поддержки фреймов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы