/ / Comment puis-je transmettre des cookies dans un navigateur Web externe? - .net, grattage d'écran

Comment puis-je transmettre des cookies dans un navigateur Web externe? - .net, grattage d'écran

J'écris une application qui devra s'ouvrirdes fenêtres de navigateur (peut probablement s'en tenir à IE) aux sites Web qui utilisent l'authentification par formulaire. L'astuce est qu'ils doivent déjà être authentifiés, afin de gagner du temps en raison du grand nombre de sites dans lesquels nous devons accéder. (Finalement, je vais les gratter à l'écran et traiter les données ... mais je devrai toujours faire fonctionner la pièce d'authentification afin qu'ils puissent cliquer sur le site réel en cas de besoin.)

J'ai réussi à faire fonctionner l'authentification par formulaire,en ce que je peux utiliser un HttpWebRequest pour obtenir le code html et le transmettre au navigateur. Cependant, je ne parviens pas à transférer les cookies vers le navigateur du client afin qu'il puisse accéder au site Web proprement dit.

Je reçois le System.Net.Cookies pour l'authentification, et j'ai essayé de les copier dans System.Web.HttpCookies et de les ajouter à l'objet Response. Si je mets un lien sur la page ou utilise Response.Redirect pour aller sur le site Web, cela ne fonctionne pas, il agit comme si l'utilisateur n'était pas authentifié.

Quelqu'un a-t-il une idée de la façon dont je réussirais?

Voici le code actuel, au cas où cela serait plus clair:

Dictionary<string, string> formValues = new Dictionary<string, string>(4);
formValues.Add("txbUserName", "USERNAME");
formValues.Add("txbPassword", "PASSWORD");
formValues.Add("SubmitB", "Log In");

HttpWebRequest webRequest;
StreamReader responseReader;
string responseData;

//This authenticates an HttpWebRequest and returns it
webRequest = FormsAuthHttpWebRequest.Create("REQUESTURI", "LOGINURI",
formValues) as HttpWebRequest;

responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());

responseData = responseReader.ReadToEnd();
responseReader.Close();

foreach (Cookie cookie in webRequest.CookieContainer.GetCookies(new Uri("SITEURI")))
{
HttpCookie httpCookie = new HttpCookie(cookie.Name, cookie.Value)
{
Domain = cookie.Domain,
Expires = cookie.Expires,
Path = cookie.Path,
HttpOnly = cookie.HttpOnly,
Secure = cookie.Secure
};

Response.Cookies.Add(httpCookie);
}


Response.Redirect("REQUESTURI");

Réponses:

3 pour la réponse № 1

Je ne pense pas que tu vas pouvoir faire ça. Le navigateur va ignorer les en-têtes "Add-Cookie" d'un serveur Web qui n'appartient pas au domaine associé aux cookies. Cela fait partie de la sécurité intégrée des cookies - il serait catastrophique (du point de vue de la sécurité et de la confidentialité) si d'autres sites Web pouvaient lire ou écrire des cookies pour un autre domaine.


0 pour la réponse № 2

Je pense que le navigateur ignore peut-être les cookiesdans l'en-tête de réponse en raison de l'imminence de Response.Redirect. Nous avons rencontré ce problème récemment et avons découvert que FF acceptait les cookies, mais pas IE6 et 7.

Mais je ne suis pas sûr de comprendre exactement ce que vous essayez de faire. Essayez-vous d'envoyer des cookies du site A au navigateur qui sont en fait destinés au site B?