Pregunta

Necesito un poco de información de un sitio web que no es mío, con el fin de obtener esta información que necesito para iniciar sesión en el sitio Web para recopilar la información, esto ocurre a través de un formulario HTML. ¿Cómo puedo hacer esto screenscaping autenticado en C #?

Mas información:

  • autenticación basada en cookies.
  • acción POST necesarios.
¿Fue útil?

Solución

Se podría hacer la solicitud como si usted acaba de rellenado el formulario. Asumiendo que es la POST, por ejemplo, se hace una petición POST con los datos correctos. Ahora bien, si no se puede acceder directamente a la misma página que desea raspar, que tendrá que realizar un seguimiento de lo que las cookies se establece después de la solicitud de acceso, e incluirlos en su solicitud de raspado para que pueda permanecer conectado.

Podría verse como:

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;

Tal vez.

Otros consejos

Puede utilizar el control de un WebBrowser . Sólo alimentar la URL de la página, a continuación, utilizar el DOM para establecer el nombre de usuario y contraseña en los campos adecuados, y, finalmente, enviar un clic con el botón de enviar. De esta manera usted no se preocupan por nada, pero los dos campos de entrada y el botón de envío. No hay manejo de cookies, sin análisis de HTML en bruto, sin HTTP sniffing -. Todo lo que se realiza mediante el control de explorador

Si vas de esa manera, algunas sugerencias más:

  1. Usted puede evitar que el control de carga de complementos como Flash - usted podría ahorrar algo de tiempo
  2. .
  3. Una vez que se conecte, se puede obtener toda la información que necesita de la DOM -. No hay necesidad de analizar HTML prima
  4. Si desea que la herramienta aún más portátil en caso de que los cambios en el sitio en el futuro, puede reemplazar su manipulación DOM explícita con una inyección de JavaScript. Los JS se pueden obtener a partir de un recurso externo, y una vez que lo llamaron puede hacer la población campos y el presente.

En algunos casos, httpResponse.Cookies estará en blanco. Usar la CookieContainer lugar.

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;

Como una adición a dlambin respuesta Es necesario tener

http.AllowAutoRedirect=false;

De lo contrario

HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;

Esto hará que otra petición a la URL inicial y usted no será capaz de recuperar url2.

Es necesario utilizar el HttpWebRequest y hacer un post. Este enlace debe ayudarle a empezar. La clave es, que hay que buscar en el formulario HTML de la página que está tratando de colocar a partir de ver todos los parámetros de la forma que necesita con el fin de enviar el mensaje.

http://www.netomatix.com/httppostdata.aspx

http://geekswithblogs.net/rakker/archive/2006 /04/21/76044.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top