Запрос 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: [немного личной информации здесь]