2013-06-20 2 views
0

Je travaille sur Ubuntu 12.04. C'est mon code simple pour implémenter la méthode HTTP GET en utilisant URLConnection.Demande HTTP GET avec URLConnection impossible d'accéder à n'importe quelle page

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()); 

    } 

} 

Mais quand je compiler et exécuter ce code de terminal ubuntu, la sortie de ce code ne donne pas le contenu de la page spécifiée par l'URL. Il donne plutôt la sortie suivante

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> 

Ce problème concerne toutes les URL que je spécifie dans le code. De plus, j'ai essayé d'accéder au contenu Web en utilisant le client telnet comme

telnet www.google.com 80 GET/

et donne le même résultat, non seulement pour www.google.com mais pour chaque URL. Je suis un étudiant à IIT Bombay et peut-être qu'il a quelque chose à voir avec https://ifwb.iitb.ac.in. Je veux aussi m'en tenir à java.net et non à apache httpclient. Alors aidez-moi à sortir de ça.

Répondre

0

Il semble que vous soyez rejeté par le serveur en raison d'une demande incomplète. C'est une bonne idée d'utiliser n'importe quel renifleur comme Fiddler ou Wireshark pour «apprendre par l'exemple»: comparez vos demandes et demandes de logiciels particuliers comme les navigateurs. Voici un extrait de Wireshark dump, comment IE10 envoie une requête GET à une URL intéressée. Comme vous pouvez le voir, il existe différents champs qui décrivent les capacités et les attentes de votre côté client. Le serveur interrogé peut donc renvoyer la réponse sous la forme la plus appropriée et la plus consommable. Entretenez-vous avec Google/RFC pour voir la signification de chaque paramètre passé dans:

GET/recherche q = fleur HTTP/1.1

Accept: text/html, application/xhtml + xml, /

Accept-Language: fr-fR

User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)

Accept-Encoding: gzip, dégonfler

Hôte: www.google.com

DNT: 1

Connection: Keep-Alive

Cookie: [certaines informations privées ici]