2012-06-03 57 views
13

Estoy tratando de escribir un script simple que recupera el texto de una página web y procesa esa cadena. Pero, ese sitio web requiere que inicie sesión. Tuve éxito al iniciar sesión en ese sitio web. Esta es la forma en que se registra en:Manejo de cookies en Google Apps Script - ¿Cómo enviar cookies en el encabezado?

var payload = {"name1":"val1","name2":val2"}; 

var opt ={"payload":payload,"method":"post"}; 

var respose = UrlFetchApp.fetch("http://website.com/login",opt); 

Después de iniciar la sesión, la página web me coloca en http://website.com/home. Revisé response.getContentText() y puedo confirmar que he iniciado sesión correctamente, ya que contiene el texto de http://website.com/home. Ahora necesito obtener el contenido de http://website.com/page y procesarlo. primera vez que asume el guión puede manejar las cookies por sí mismo y procedió con

var pagedata = UrlFetchApp.fetch("http://website.com/page);//Did not work 

Ese trabajo obviamente no funcionaba y pagedata.getContentText() dice que me registre en primer lugar, lo que indica cookies no se ha superado con éxito ..

Entonces intenté extraer las cookies que el servidor respondió durante el inicio de sesión y enviarlas junto con esta solicitud.

var cookie = response.getAllHeaders()['Set-Cookie'];  

// variable cookie now contains a legitimate cookie. 

// It contains 'JSESSIONID=blabla;Path=/' and 
// it is the ONLY cookie that server responds. 

Intenté enviar esa cookie en mi solicitud de página.

var header = {'Cookie':cookie}; 

var opt2 = {"header":header}; 

var pagedata = UrlFetchApp.fetch("http://website.com/page",opt2); 

Creo que incluso ahora las cookies no se enviaron correctamente, ya que el contenido me dice nuevamente que inicie sesión.

¿Estoy pasando las cookies correctamente? Necesito ayuda con respecto al método correcto para enviar cookies en una solicitud.

Respuesta

7

Aquí puede encontrar galletas especificación: http://www.w3.org/Protocols/rfc2109/rfc2109

tiene un problema potencial en su código: response.getAllHeaders() [ 'Set-Cookie '] puede devolver una cadena o una tabla de cadena si se devuelven múltiples atributos' set-cookie 'del servidor.

Eric tiene razón, no puede devolver la cookie sin digerirla.

segundo error en el código:

var opt2 = {"header":header}; 

debería haber

var opt2 = {"headers":header}; 

Tenga en cuenta también que el gas utiliza IP de Google. Puede suceder que dos búsquedas consecutivas utilicen direcciones IP diferentes. El servidor al que se está conectando puede depender de la sesión IP.

¿Estás seguro de que el servidor solo te devuelve una cookie después de una autenticación?

+0

¡Gracias por señalarlo !. Sí, estoy seguro de que el servidor envía solo una cookie de autenticación. Trataré de reportarlo con '" encabezados "' – AKarthik10

+0

EDITAR: Lo intenté con '" encabezados "' y funcionó. Puedo confirmar que está funcionando. Hice un archivo PHP, que registra todos los encabezados con los que fue solicitado. Lo solicité con UrlFetchApp y pude ver en mi registro todos los encabezados personalizados que envié desde UrlFetchApp. Entonces, donde cometí un error fue '" header "' y debe ser '" headers "'. ¡Gracias! – AKarthik10

1

Parece que está configurando los encabezados correctamente en UrlFetchApp.fetch().

Creo que los datos en el encabezado Set-Cookie tienen un formato diferente al de los datos que se esperan en el encabezado Cookie. Por ejemplo, set-cookie contiene información acerca de la caducidad, etc.

+0

He verificado que se 'Set-Cookie: JSESSIONID = A04 ~ 1E321E3265CB36814498F30B8D134667.w804; Path =/'. He intentado pasar la cookie completa (incluyendo 'Path = /') y enviar solo la cookie 'JSESS..' (usando split con; como delimitador). Ambos han fallado. – AKarthik10

0

Estaba usando Google Script para obtener y enviar cookies desde mi hoja de cálculo de google y creo que no funciona. Las cookies son diferentes en minutos.

A continuación encontrará cuatro galletas utilizando UrlFetchApp.fetch() de solicitud de escritura de hoja de cálculo de Google para un mismo sitio, sólo diferentes son minutos ... Creo que es posible que utiliza direcciones IP de Google y son diferentes en cualquier momento ...

Alguien sabe cómo resolver eso?

El código es:

Cookie=response0.getAllHeaders()['Set-Cookie']; 

Cookies:

B=12gp68lcnp5q4&b=3&s=sk; expires=Sun, 29-Jul-2018 14:10:12 GMT; path=/; domain=.***.com      

B=7us258lcnp5sh&b=3&s=oc; expires=Sun, 29-Jul-2018 14:11:29 GMT; path=/; domain=.***.com      

B=5nviv8tcnp5u5&b=3&s=qf; expires=Sun, 29-Jul-2018 14:12:22 GMT; path=/; domain=.***.com      

B=c8eumg9cnp5vp&b=3&s=uj; expires=Sun, 29-Jul-2018 14:13:13 GMT; path=/; domain=.***.com      
+0

Si tiene una nueva pregunta, por favor, haga clic en el botón [Ask Question] (https://stackoverflow.com/questions/ask). Incluye un enlace a esta pregunta si ayuda a proporcionar contexto. - [De la crítica] (/ review/low-quality-posts/16870036) –

Cuestiones relacionadas