1 votes

La requête HTTP ne fonctionne que dans le navigateur

J'ai la requête GET suivante qui renvoie du HTML pour un formulaire de connexion, indiquant que mon authentification, c'est-à-dire les informations d'identification, est incorrecte. Lorsque je suis authentifié dans une session de navigateur et que je demande manuellement la même URL, j'obtiens en réponse le document XML vide attendu. Que me manque-t-il ?

    var getRequest = WebRequest.Create("http://frulo.com/v1/company/subscribers.xml") as HttpWebRequest;
    getRequest.Credentials = new NetworkCredential("user@company.net", "password");
    using (var response = getRequest.GetResponse() as HttpWebResponse)
    {
        var sr = new StreamReader(response.GetResponseStream());
        Response.Write(sr.ReadToEnd());
    }

0voto

ceejayoz Points 85962

Il se peut qu'ils bloquent l'agent utilisateur de votre programme afin d'empêcher ce type de raclage.

0voto

0xA3 Points 73439

Vous connaissez déjà la réponse : Lorsque vous êtes authentifié dans une session de navigateur, vous obtenez la réponse correcte. Cela signifie que vous n'êtes pas authentifié lorsque vous utilisez l'application WebRequest .

Les informations d'identification que vous fournissez sont utilisées pour Authentification HTTP mais votre site web utilise très probablement une sorte d'authentification basée sur des formulaires HTML.

Pour résoudre ce problème, vous devrez utiliser le même mécanisme d'authentification que l'application web. Il peut s'agir d'un cookie ou d'un identifiant de session transmis en tant que paramètre POST ou GET avec chaque requête. Sans connaître les détails du site Web, il est difficile de vous aider davantage.

La question suivante est liée à la vôtre et vous sera très probablement utile :

C# Connexion à un site Web via un programme

0voto

John K Points 13695

L'utilisation de la propriété Web Request Proxy pourrait aider dans certaines circonstances. J'ai inséré une ligne de code avec un commentaire de MSDN.

   var getRequest = WebRequest.Create("http://frulo.com/v1/company/subscribers.xml") as HttpWebRequest;

    //MSDN states: Returns a proxy configured with the Internet Explorer settings of the currently impersonated user.
    getRequest.Proxy = WebRequest.GetSystemWebProxy();

    getRequest.Credentials = new NetworkCredential("user@company.net", "password");
    using (var response = getRequest.GetResponse() as HttpWebResponse) {
        var sr = new StreamReader(response.GetResponseStream());
        HttpContext.Current.Response.Write(sr.ReadToEnd());
    }

.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X