2017-02-27 11 views
0

Exigence - Télécharger le fichier sur le sitefichier Web téléchargement - le code de retour 403 (Programme du navigateur et Java, cliquez sur la souris fonctionne très bien)

Problème - L'erreur de problèmes de programme comme suit:

Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: https://www.nseindia.com/content/historical/EQUITIES/2015/FEB/cm25FEB2015bhav.csv.zip 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1840) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441) 
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 
at java.net.URL.openStream(URL.java:1045) 
at org.apache.commons.io.FileUtils.copyURLToFile(FileUtils.java:1460) 

Le téléchargement fonctionne très bien si je suis ci-dessous les étapes manuelles:

  1. Ouvrir le navigateur avec lien - weblink
  2. Sélectionnez Bhavcopy de Sélectionnez Rapport champ déroulant
  3. Spécifiez date 25-02-2015 Cliquez sur le fichier - cm25FEB2015bhav.csv.zip

Mais si je colle le chemin du fichier - link directement dans le navigateur, il donne 403 erreur.

Je crois que le téléchargement ne fonctionne pas à partir du navigateur directement à travers le lien, même mon prog est incapable de télécharger le même. J'ai essayé les suggestions mentionnées dans les discussions - Thread1, Thread2, Thread3 mais n'a pas aidé.

Query: Est-il possible de contourner ce blocage par le serveur via le code java? Comme je l'ai besoin de télécharger les fichiers pour plusieurs dates si vous cliquez sur manuelle est impossible

code:

public static void main(String[] args) throws IOException { 
    String urlPath = "https://www.nseindia.com/content/historical/EQUITIES/2015/FEB/cm25FEB2015bhav.csv.zip"; 
    URL url = new URL(urlPath); 
    // Option - 1: 
    URLConnection conn = url.openConnection(); 
    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"); 
    conn.connect(); 
    // Option - 2: 
//  HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
//  connection.addRequestProperty("REFERER", https://www.nseindia.com/products/content/equities/equities/archieve_eq.htm); 
//  connection.setRequestMethod("GET"); 

     String zipBhavCopy = "C:\\zipBhavCopy.zip"; 

     FileUtils.copyURLToFile(new URL(urlPath), new File(zipBhavCopy)); 

    } 

Répondre

0

Ce site Web vérifiera l'agent utilisateur et consulter l'URL dans une requête http.

Vous avez donc besoin d'ajouter l'URL de référence à votre demande.

Le referer HTTP (à l'origine une faute d'orthographe du référent [1]) est un champ d'en-tête HTTP qui identifie l'adresse de la page Web (par exemple l'URI ou IRI) qui relie à la ressource demandée. En vérifiant le référent, la nouvelle page Web peut voir d'où provient la requête.

Ajouter cette ligne à votre code.

conn.setRequestProperty("Referer", "https://www.nseindia.com/products/content/equities/equities/archieve_eq.htm")

serveur vérifie HTTP ce champ pour éviter d'abuser.

+0

Cela ne fonctionne pas. J'ai déjà essayé ceci, référez-vous à l'option-2 dans le code collé dans ma requête initiale – iCoder

+0

Je peux le télécharger avec la commande '$ curl -v -A" Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/56.0.2924.87 Safari/537.36 "-e" https://www.nseindia.com/products/content/equities/equities/archieve_eq.htm "https://www.nseindia.com/content /historical/EQUITIES/2015/FEB/cm25FEB2015bhav.csv.zip -o temp.zip'. Il semble que l'agent d'utilisateur et le renvoi sont tous les deux requis. – user2541463

+0

Cela peut fonctionner avec la commande CURL mais cela ne fonctionne pas via le programme Java. Aussi, je ne peux pas télécharger chaque fichier en utilisant les commandes de la console. – iCoder