Comment se connecter à un programme dans le site web de ScreenScape?
-
13-09-2019 - |
Question
Je souhaite des informations à partir d'un site Web qui est pas à moi, afin d'obtenir cette information, je dois vous connecter au site Web pour recueillir les informations, ce qui se passe à travers un formulaire HTML. Comment puis-je faire screenscaping authentifié en C #?
Informations supplémentaires:
- l'authentification basée sur des cookies.
- action POST nécessaire.
La solution
Vous souhaitez faire la demande comme si vous aviez simplement rempli le formulaire. En supposant qu'il est POST par exemple, vous faites une requête POST avec les données correctes. Maintenant, si vous ne pouvez pas vous connecter directement à la même page que vous voulez gratter, vous devrez suivre ce que les cookies sont mis après votre demande de connexion, et les inclure dans votre demande de racler pour vous permettre de rester connecté.
Il pourrait ressembler à:
HttpWebRequest http = WebRequest.Create(url) as HttpWebRequest;
http.KeepAlive = true;
http.Method = "POST";
http.ContentType = "application/x-www-form-urlencoded";
string postData="FormNameForUserId=" + strUserId + "&FormNameForPassword=" + strPassword;
byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData);
http.ContentLength = dataBytes.Length;
using (Stream postStream = http.GetRequestStream())
{
postStream.Write(dataBytes, 0, dataBytes.Length);
}
HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;
// Probably want to inspect the http.Headers here first
http = WebRequest.Create(url2) as HttpWebRequest;
http.CookieContainer = new CookieContainer();
http.CookieContainer.Add(httpResponse.Cookies);
HttpWebResponse httpResponse2 = http.GetResponse() as HttpWebResponse;
Peut-être.
Autres conseils
Si vous allez de cette façon, quelques suggestions:
- Vous pouvez empêcher le contrôle du chargement des add-ins tels que Flash - pourrait vous faire économiser du temps .
- Une fois connecté, vous pouvez obtenir toutes les informations dont vous avez besoin du DOM -. Pas besoin d'analyser HTML brut
- Si vous voulez rendre l'outil encore plus portable au cas où les changements de site dans l'avenir, vous pouvez remplacer votre manipulation DOM explicite avec une injection de JavaScript. Les JS peuvent être obtenus à partir d'une ressource externe, et une fois appelé, il peut faire la population des champs et de la soumettre.
Dans certains cas, httpResponse.Cookies
sera vide. Utilisez le CookieContainer
à la place.
CookieContainer cc = new CookieContainer();
HttpWebRequest http = WebRequest.Create(url) as HttpWebRequest;
http.KeepAlive = true;
http.Method = "POST";
http.ContentType = "application/x-www-form-urlencoded";
http.CookieContainer = cc;
string postData="FormNameForUserId=" + strUserId + "&FormNameForPassword=" + strPassword;
byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData);
http.ContentLength = dataBytes.Length;
using (Stream postStream = http.GetRequestStream())
{
postStream.Write(dataBytes, 0, dataBytes.Length);
}
HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;
// Probably want to inspect the http.Headers here first
http = WebRequest.Create(url2) as HttpWebRequest;
http.CookieContainer = cc;
HttpWebResponse httpResponse2 = http.GetResponse() as HttpWebResponse;
En complément de réponse dlambin Il est nécessaire d'avoir
http.AllowAutoRedirect=false;
Dans le cas contraire
HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;
Il fera une autre demande initiale URL et vous ne serez pas en mesure de récupérer url2.
Vous devez utiliser le HttpWebRequest et faire un POST. Ce lien devrait vous aider à démarrer. La clé est, vous devez regarder le formulaire HTML de la page que vous essayez de poster de voir tous les paramètres du formulaire a besoin pour soumettre le message.
http://www.netomatix.com/httppostdata.aspx
http://geekswithblogs.net/rakker/archive/2006 /04/21/76044.aspx