Получить ответ на запрос HTTP GET - PullRequest
2 голосов
/ 11 ноября 2011

Я бы хотел использовать http://www.imdbapi.com/ в Java, но я не знаю, могу ли я получить доступ к HTTP-ответу. Я попробовал следующее:

public Map<String, String> get(String title)
{
    URL url = new URL("http://www.imdbapi.com/?t=" + title);
    URLConnection conn = url.openConnection(); 

    conn.getContent();      

}

Ответы [ 4 ]

7 голосов
/ 11 ноября 2011

Вы можете использовать URLConnection#getInputStream():

InputStream input = conn.getInputStream();
// ...

Или просто сокращение URL#openStream() напрямую:

InputStream input = url.openStream();
// ...

Получив его, просто отправьте его в JSON-анализатор на ваш выбор, например, Gson :

InputStream input = new URL("http://www.imdbapi.com/?t=" + URLEncoder.encode(title, "UTF-8")).openStream();
Map<String, String> map = new Gson().fromJson(new InputStreamReader(input, "UTF-8"), new TypeToken<Map<String, String>>(){}.getType());
// ...

(обратите внимание, что я исправил строку запроса для правильного кодирования URL)

Смотри также:

1 голос
/ 11 ноября 2011

Код ниже должен помочь вам начать. Вам необходимо добавить кодировку URL, если вы собираетесь отправлять специальные символы. Для разбора ответа JSON вы, вероятно, могли бы использовать анализатор, доступный в java по адресу [ссылка] http://www.JSON.org/

package problem;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
public class Test {

public static void main(String args[])
{
 BufferedReader rd;
 OutputStreamWriter wr;

try
{
    URL url = new URL("http://www.imdbapi.com/?i=&t=dexter");
    URLConnection conn = url.openConnection();
    conn.setDoOutput(true);
    wr = new OutputStreamWriter(conn.getOutputStream());
    wr.flush();

    // Get the response
    rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String line;
    while ((line = rd.readLine()) != null) {
       System.out.println(line);
    }
}
catch (Exception e) {
        System.out.println(e.toString());
    }

  }
 }
1 голос
/ 11 ноября 2011

Когда вы заходите на веб-сайт и вводите образец фильма (я сделал True Grit), вы фактически можете увидеть ответ, который вы получите. Это выглядит примерно так:

{"Title":"True Grit","Year":"2010","Rated":"PG-13","Released":"22 Dec 2010","Genre":"Adventure, Drama, Western","Director":"Ethan Coen, Joel Coen","Writer":"Joel Coen, Ethan Coen","Actors":"Jeff Bridges, Matt Damon, Hailee Steinfeld, Josh Brolin","Plot":"A tough U.S. Marshal helps a stubborn young woman track down her father's murderer.","Poster":"http://ia.media-imdb.com/images/M/MV5BMjIxNjAzODQ0N15BMl5BanBnXkFtZTcwODY2MjMyNA@@._V1._SX320.jpg","Runtime":"1 hr 50 mins","Rating":"8.0","Votes":"51631","ID":"tt1403865","Response":"True"}

Зная эту информацию, вы можете легко проанализировать ваш InputStream, который вы получаете по соединению.

Удачи!

0 голосов
/ 18 сентября 2017

Рекомендую использовать http-запрос построен на Apache http api.

private static final HttpRequest<Map<String, String>> HTTP_REQUEST = 
        HttpRequestBuilder.createGet("http://www.imdbapi.com/", 
             new TypeReference<Map<String, String>>{}
        ).build();

public Map<String, String> get(String title) {
   ResponseHandler<Map<String, String>> responseHandler = HTTP_REQUEST.execute("t", title);
   return responseHandler.orElse(Collections.emptyMap()); //returns response parsed as map or empty map when response body is empty
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...