2015-10-09 1 views
0

Je voudrais accéder au lien http://www.nation.co.ke/business/seedsofgold/Egg-imports-from-Uganda-hatch-big-losses-for-farmers/-/23/2897930/-/dpeqesz/-/index.htmlURL accessible au public de jeter IOException

Le lien est accessible au public, et peut même charger en utilisant curl

Mais dans le code Java, il jette Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: http://www.nation.co.ke/business/seedsofgold/Egg-imports-from-Uganda-hatch-big-losses-for-farmers/-/23/2897930/-/dpeqesz/-/index.html

C'est le Code:

/** 
* 
* @param url the HTML page 
* @throws IOException 
*/ 
public static String getPage(String url) throws IOException { 
    URL u = new URL(url); 
    URLConnection conn = u.openConnection(); 

    String mime = conn.getContentType(); 
    if(!StringUtils.containsIgnoreCase(mime, "text/html")) { 
     return null; // don't continue if not HTML 
    } 
    else { 

     // read the response body, using BufferedReader for performance 
     InputStream in = conn.getInputStream(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(in, Charset.defaultCharset())); 
     int n = 0, totalRead = 0; 
     char[] buf = new char[1024]; 
     StringBuilder content = new StringBuilder(); 

     // read until EOF or first 16384 characters 
     while (totalRead < 16384 && (n = reader.read(buf, 0, buf.length)) != -1) { 
      content.append(buf, 0, n); 
      totalRead += n; 
     } 
     reader.close(); 

} 

L'erreur est lancée sur:

 InputStream in = conn.getInputStream(); 

Le même code fonctionne très bien avec d'autres URL.

Répondre

1

essayez d'ajouter

conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"); 

à votre connexion juste après URLConnection conn = u.openConnection();. De nombreux sites Web bloquent l'accès au site lorsque aucun agent correct n'est défini.

+0

Ceci fait. Merci. –

1

Si vous obtenez le code d'état HTTP 403, cela signifie que l'accès à la ressource identifiée par l'URL est interdit pour une raison quelconque. Un serveur Web peut renvoyer un code d'état HTTP 403 Interdit en réponse à une requête d'un client pour une page Web ou une ressource indiquant que le serveur peut être contacté et compris la requête, mais refuse de prendre d'autres mesures.

Vous pouvez vous référer HTTP 403 status code

+0

Bien expliqué. –

+0

L'erreur 403 s'est produite uniquement lors de l'accès via 'URLConnection'. La page est chargée correctement dans un navigateur et même via curl. Pour la solution voir la réponse par @ScreamingTree –

+0

Vous avez juste besoin d'ajouter l'en-tête de l'agent utilisateur. –