8
votes

Téléchargement d'un fichier à partir d'un site Web à l'aide de C #

J'essaie de télécharger un fichier à partir d'un site Web à l'aide du code suivant: xxx

L'exception affichée est "Erreur interdite 403"

Ça signifie une page non trouvée Mais je peux télécharger ce fichier à l'aide du code Java et je peux aussi le télécharger directement à partir de ce site Web.

Comment télécharger ceci à l'aide du code C #?


3 commentaires

403 interdit ne signifie pas la page non trouvée..Il signifie interdit


403 ne signifie pas la page non trouvée; Ce serait 404. 403 en fait est «interdit», comme le contenu est là, mais vous n'avez pas les bonnes informations d'identification.


Je peux le télécharger directement à partir de ce site Web et utiliser le code Java.Mais en utilisant le code C # que je ne peux pas télécharger


5 Réponses :


-2
votes

Essayez quelque chose comme xxx


1 commentaires

plz me dire comment utiliser ce code. whr nous voulons donner le lien



2
votes

Vous devez définir les deux en-têtes suivants pour que cela fonctionne:

  • utilisateur-utilisateur: défini sur un agent utilisateur de navigateur standard
  • accepter: défini pour accepter "Application / ZIP"

    exemple (testé): xxx


6 commentaires

@Brokenglass: Sortie de la curiosité, connaissez-vous l'agent utilisateur par défaut de WebClient?


Par défaut que l'en-tête n'est pas défini du tout si je ne me trompe pas


@Brad, c'est rien. Un bon moyen de déboguer / homologue dans les interactions HTTP est d'utiliser un projet appelé Fiddler. Fiddler2.com/fiddler2 . La seule chose envoyée est la demande d'obtention.


@ Tritchmelton: J'utilise habituellement des éthérées, mais j'ai pensé que quelqu'un aurait une réponse plus rapide que celle de moi à la filature d'un projet. Merci pour la réponse, je l'apprécie.


@Brad - basé sur mon expérience avec le déploiement de Wans Satcom distribuée, je pense que l'éthéré (Wireshark, etc.) est bon pour le dépannage des problèmes de réseau. Fiddler est idéal pour le débogage HTTP de niveau d'application. C'est un outil spécifique pour un travail spécifique. Je recommande fortement de jeter un coup d'oeil.


@ Tritchmelton: Est-ce que ces jours-ci ne feront pas trop de déboguer dans ce domaine (en plus d'aider un soirée aussi souvent). Et tout ce que je fais effectue est généralement facilement débogué avec tamperdata à FF (bien que de retour quand je l'ai fait, j'ai généralement aimé voir les données brutes - était toujours amusante à faire des hacks de jeu via le proxy dans les années 90; p - oups, a fait Je dis ça?)



3
votes

J'ai testé cette URL avec Wget et obtenu une erreur 403. J'ai pu résoudre ce problème en ajoutant une chaîne d'agent utilisateur à l'en-tête

Essayez d'ajouter une chaîne d'agent utilisateur à l'en-tête, en utilisant webclient.headers.add (httpRequestheader.useragent, "bla")


1 commentaires

Cela fixe le problème pour moi lorsque vous essayez de télécharger une page Web différente.



6
votes

La première chose à noter est que si vous essayez l'URL de votre navigateur, le fichier télécharge. Ce qui vous dit, c'est que vous devez configurer le WebClient pour envoyer des en-têtes imitant ce que le site Web s'attendrait à ce qu'un navigateur fasse. C'est ce qui fonctionne pour moi:

        var wc = new WebClient();
        var ua = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
        wc.Headers.Add(HttpRequestHeader.UserAgent, ua);
        wc.Headers["Accept"] = "/";
        wc.DownloadFile("http://www.nseindia.com/content/historical/EQUITIES/2011/MAR/cm07MAR2011bhav.csv.zip", @"d:\myfile.txt");


0 commentaires

0
votes
using (WebClient wc = new WebClient())
{
  wc.Headers.Add("Referer:https://www.nseindia.com/products/content/equities/equities/archieve_eq.htm");
  wc.Headers.Add("User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36");
  wc.DownloadFile(url, fileName);
}

1 commentaires

Des commentaires? Pourquoi pensez-vous que cela devrait fonctionner? Comment est-il différent des réponses précédentes?