Est-il possible de transférer de l'authentification de Webbrowser à WebRequest
Je suis en utilisant le contrôle webbrowser pour vous connecter à un site. Et puis je veux télécharger une sous page html à l'aide de WebRequest (ou client web). Ce lien doit requiert une authentification.
Comment transférer Webbrowser les informations d'authentification de Webrequest ou Webclient?
- À partir du nom des classes peut-on supposer que vous posez sur le .NET de la classe de base de la bibliothèque de classes?
- oui. Système.Net.WebRequest
- Ce type d'authentification de faire les liens nécessaires? Un formulaire de connexion? Certificat client SSL? L'authentification Windows?
- formulaire d'authentification. pas de ssl
- Pouvez vous s'il vous plaît prendre un peu de recul et de décrire exactement ce que vous êtes en train de faire? Pouvez-vous apporter des modifications à ce site web? Est-il un site web externe qui est de l'hébergement de votre contrôle? Quelle est la nécessité de contrôle sur le site pour lequel il a à faire de l'authentification?
Vous devez vous connecter pour publier un commentaire.
Si la question est "Comment faire pour transférer des Webbrowser les informations d'authentification de Webrequest ou Webclient?" ce code est assez:
Vous pouvez appeler la GetUriCookieContainer méthode qui vous renvoie un CookieContainer qui peuvent être utilisées pour appeler avec un objet WebRequest.
Si trouvé cette solution. Simple de créer une Classe.cs fichier avec les informations ci-dessous et appelez la statique
GetCookieInternal
fonction.Exemple:
Vous devriez être en mesure d'accéder aux cookies de la
WebBrowser
de contrôle avec.Document.Cookie
puis dans votreHTTPWebRequest
vous pouvez ajouter ce cookie pour son cookie contenant.Voici un exemple (VB.NET parce que je suis plus familière):
Et qui devrait transférer le cookie de votre
WebBrowser
le contrôle de votreHTTPWebRequest
classe.Une façon de le faire est d'obtenir le cookie à l'aide de InternetGetCookie fonction, de construire correspondant
cookie
de l'objet et de l'utiliser pour laCookieContainer
Pour récupérer des cookies HttpOnly utilisation InternetGetCookieEx
Voici quelques exemples:
InternetGetCookie() dans .NET
Télécharger en utilisant Internet Explorer, les Cookies
Si vous pouvez récupérer les cookies nécessaires à partir du contrôle WebBrowser après qu'ils sont définis par le site de vous connecter, vous devriez être en mesure de l'utilisation de ces mêmes cookies avec WebRequest/WebClient.
Cette article décrit comment utiliser les cookies avec un client web; vous avez à la sous-classe, mais c'est seulement un seul remplacer ce qui est nécessaire.
Une réponse tardive pour de futures références.
WebBrowser
utilise UrlMon bibliothèque qui gère la session par processus, de sorte UrlMon Api comme URLOpenStream ou URLDownloadToFile peut être utilisé pour télécharger toutes les ressources sur la même session (l'Api peut être appelée à partir de C# via P/invoke). Une question similaire a répondu ici.Je sais que c'est une très vieille question, mais il est la réponse donc, je veux partager la solution que j'ai préparé
Je n'ai pas transféré mes cookies de navigateur pour webrequest mais j'ai utilisé webclient en place de webrequest et pour cela, il existe des étapes ci-dessous j'ai suivi
Créer cookie connaissance client web
Analyser les cookies de contrôle de navigateur web
Attribuer analysé les cookies cookie contenant
Créer des cookies conscient web client de l'objet en utilisant le cookie contenant
Utiliser un cookie conscient web client de l'objet à envoyer vos demandes maintenant
Expliqué en détails sur ce lien http://www.codewithasp.net/2016/06/transferring-cookies-webbrowser-webclient-c-net.html
Il n'est pas facile à accomplir ce que vous essayez de faire. Le serveur pourrait être à l'aide de l'un des deux types d'authentification avec le client (navigateur)
1) le Transport de l'authentification
2) la base de Formulaires auth.
Transport auth: Dans ce cas, l'authentification se fait à l'aide de la connexion de transport lui-même - ici, il va utiliser les en-têtes HTTP personnalisés avec un multidirectionnelles poignée de main pour faire le auth.
Basée sur les formulaires d'authentification:C'est le traditionnel auth qui est fait lorsque vous entrez vos informations d'identification dans un formulaire.
Dans les deux cas, l'authentification peut être déjà arrivé par le temps de votre contrôle de gestion est instancié. Comme quelqu'un l'a suggéré, vous pouvez voler les navigateurs, les cookies de ce domaine et l'utiliser avec webclient mais alors, il peut ou peut ne pas fonctionner comme vous le souhaitez.
Si tout ce que vous voulez faire est de télécharger quelque chose, alors je voudrais voir si je pouvais utiliser les navigateurs installations, par exemple, XmlHttpRequest ou certains autres ajax mécanisme pour télécharger ce que vous voulez dans le cadre du DOM de la page qui héberge le contrôle. Ensuite, vous avez pu lire que le contenu de votre commande, ou vous pourriez également avoir le navigateur injecter du contenu dans votre contrôle par le biais de Javascript à appeler une méthode/propriété sur votre contrôle.
[MODIFIER]
Trouver (à l'aide de Firebug plugin dans firefox) exactement comment les formes en fonction d'authentification est fait dans le navigateur. Ensuite, vous pouvez écrire du code pour faire exactement la même requête/réponse que le navigateur est en train de faire. Pour le site, le client apparaît comme n'importe quel autre navigateur basé sur le client. Ensuite, vous devriez être en mesure de télécharger tout ce que vous voulez à partir du site web.
Espère que cette aide.
En fait, j'ai été par le biais de ce même problème sur la plate-forme Windows Mobile, et la seule chose qui a fonctionné a été d'étendre le contrôle WebBrowser (à l'aide de C++ :<) pour capturer le POST/GET vars avant l'envoi de la demande.
Cette bibliothèque peut vous aider:
http://www.codeproject.com/KB/miscctrl/csEXWB.aspx
"..la bibliothèque implémente l'PassthroughAPP paquet par Igor Tandetnik, qui permet au client d'intercepter tous les protocoles HTTP et HTTPS requêtes et les réponses."
Si bien qu'il n'est pas possible d'obtenir la POST/GET vars utilisé pour votre basic auth sur une norme de contrôle WebBrowser, il serait possible que si vous utilisez un contrôle étendu comme l'exemple j'ai relié - en fait, de nombreux "Extended WebBrowser" contrôles sont créés en raison de problèmes très similaires à la vôtre. Malheureusement, comme je sais que vous avez besoin pour ce faire à l'aide de code non managé/c++ :(.