2009-10-22 7 views
1

Bon, alors voici ce que je fais. Je demande à un serveur de retirer un fichier. Je fais ceci en faisant une demande de Web au site Web pour obtenir la réponse juste comme vous le feriez habituellement, bien que j'obtienne une erreur 403 disant que je n'ai pas les permissions.WebRequest C# 403 Erreur

Le problème est lorsque je branche l'URL dans Google Chrome, je suis redirigé et le fichier que j'ai demandé descend. J'ai essayé l'URL sur d'autres navigateurs et ai obtenu l'erreur 403.

Que fait Google Chrome qui lui permet de contourner l'erreur 403? J'ai essayé d'utiliser l'agent d'utilisateur Google Chrome, mais cela ne m'aide pas.

Aide

Répondre

1

Merci pour l'aide. Aucune de vos réponses ne m'a directement aidé, mais merci d'avoir essayé.

Mon programme essayait de retirer un fichier d'un serveur. J'avais compris comment contourner les problèmes d'authentification et trouver le fichier sur le serveur tout en utilisant Chrome. Il s'avère que leur service Web est plus avancé en utilisant des sessions utilisateur.

Fondamentalement, je n'ai pas eu accès aux commandes webservice, donc tout ce que je peux faire est d'utiliser les URL http de base pour obtenir une réponse prédéfinie. Les fichiers url que j'avais utilisés pour obtenir le fichier du serveur n'étaient pas uniques, ils étaient dynamiques en fonction du webbrowser/de la session. J'utilisais l'objet HTTPRequest pour obtenir le fichier HTML afin que je puisse l'analyser. Avec le fichier html j'ai analysé pour trouver l'ID dynamique du fichier (je pensais que c'était unique). Ensuite, je l'attacher à la fin d'une URL. Dans Chrome, je serais redirigé et présenté avec l'invite de téléchargement. Le problème était que j'avais besoin de l'objet webbrowser quand je voulais retirer le fichier. Sachant cela, j'ai utilisé l'objet webbrowser pour obtenir l'ID du fichier, puis j'ai utilisé le même objet webbrowser (Techniquement les mêmes sessions selon le serveur web) pour extraire le fichier.

C'est plutôt compliqué. Fondamentalement, mon programme est un petit hack qui fournit des fonctionnalités que le serveur essaie de bloquer.

J'espère que cela vous a aidé dans vos futurs projets.

+0

"C'est plutôt compliqué" va certainement m'aider si j'ai besoin de mettre en œuvre une solution similaire. Merci! :) – mrduclaw

+0

Ouais c'est tout sur les cookies.C'est mon premier programme utilisant l'Internet, probablement devrait avoir choisi un programme un peu plus facile pour commencer. – Thomas

1

Peut-être le serveur Web reconnaît l'agent utilisateur Chrome et permet le fichier à télécharger par celui-ci, mais pas par d'autres agents utilisateurs. Configurez votre WebRequest pour utiliser les mêmes chaînes et paramètres d'agent utilisateur que Google Chrome - par défaut, il peut utiliser les paramètres IE.

Modifier: Voici instruction from MSDN about how to set the WebRequest user agent string. Pour connaître l'agent utilisateur d'un navigateur, entrez dans la barre d'adresse:

javascript:prompt('my user agent string is', navigator.userAgent); 
1

Le 403 status code indique la ressource que vous essayez d'atteindre est interdite. Comme dans, ne demandez pas parce que vous ne l'obtenez pas. Cela diffère du code 401 en ce qu'un défi d'autorisation est présenté avant que le serveur ne confirme la livraison de la ressource.

Bien que cela puisse être une configuration par programme, cela peut également s'expliquer par des restrictions d'accès sur la ressource telle que configurée via le serveur Web.

Pouvez-vous vérifier que la ressource téléchargée dans Google Chrome est la ressource attendue que vous tentez d'atteindre?

Questions connexes