Запрос HTTP GET с URLConnection не может получить доступ ни к одной странице

Я работаю над Ubuntu 12.04. Это мой простой код для реализации метода HTTP GET с использованием URLConnection.

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;

public class HttpURLConnectionExample {

private final String USER_AGENT = "Mozilla/5.0";

public static void main(String[] args) throws Exception {

    HttpURLConnectionExample http = new HttpURLConnectionExample();

    System.out.println("Testing 1 - Send Http GET request");
    http.sendGet();
}

// HTTP GET request
private void sendGet() throws Exception {

    String url = "https://www.google.com/search?q=flower";

    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();

    // optional default is GET
    con.setRequestMethod("GET");

    //add request header
    con.setRequestProperty("User-Agent", USER_AGENT);

    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'GET' request to URL : " + url);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();

    //print result
    System.out.println(response.toString());

    }

}

Но когда я компилирую и запускаю этот код из терминала Ubuntu, вывод этого кода не дает содержимого страницы, указанной в URL. Скорее это дает следующий вывод

Testing 1 - Send Http GET request

Sending 'GET' request to URL : http://www.google.com/search?q=flower
Response Code : 307
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>307 Temporary Redirect</title></head><body><h1>Temporary Redirect</h1><p>The document has moved <a href="https://ifwb.iitb.ac.in/index.php?add=www.google.com/search">here</a>.</p><hr><address>Apache/2.2.22 (Fedora) Server at www.google.com Port 80</address></body></html>

Эта проблема относится к любому URL, указанному в коде. Более того, я пытался получить доступ к веб-контенту с помощью клиента telnet

telnet www.google.com 80 GET /

и это дает аналогичный результат не только для www.google.com, но и для каждого URL. Я учусь в IIT Bombay и, возможно, это как-то связано с https://ifwb.iitb.ac.in/. Я также хочу придерживаться java.net, а не apache httpclient. Так что помогите мне в этом.

1 ответ

Кажется, вы отклонены сервером из-за неполного запроса. Хорошая идея - использовать любой сниффер, такой как Fiddler или Wireshark, чтобы "учиться на собственном примере": сравнивайте свои запросы и запросы от определенного программного обеспечения, такого как браузеры.

Ниже приведен отрывок из дампа Wireshark о том, как IE10 отправляет GET-запрос на интересующий URL. Как видите, существуют различные поля, которые описывают возможности и ожидания вашей клиентской стороны, поэтому запрашиваемый сервер может вернуть ответ в наиболее удобной и удобной форме. Проконсультируйтесь с Google/RFC, чтобы увидеть значение каждого параметра, переданного в:

GET / search? Q = цветок HTTP/1.1

Принять: текст /html, приложение / xhtml + xml, /

Accept-Language: en-US

Пользователь-агент: Mozilla/5.0 (совместимый; MSIE 10.0; Windows NT 6.1; WOW64; Trident / 6.0)

Accept-Encoding: gzip, выкачать

Хост: www.google.com

DNT: 1

Подключение: Keep-Alive

Cookie: [немного личной информации здесь]

Другие вопросы по тегам