authentication - nodejs - phantomjs screenshot
¿Cómo puedo usar cookies persistentes de un archivo usando phantomjs? (2)
Phantom JS y cookies
--cookies-file=cookies.txt
solo almacenará cookies que no sean de sesión en el --cookies-file=cookies.txt
cookies. El inicio de sesión y la autenticación se basan más comúnmente en las cookies de sesión.
¿Qué hay de las cookies de sesión?
Para guardar esto es bastante simple, pero debe considerar que probablemente caduque rápidamente.
Debe escribir la lógica de su programa para considerar esto. Por ejemplo
- Cargue las cookies de la cookiejar
- Toca una URL para verificar si el usuario está conectado
Si no has iniciado sesión
Inicia sesión, guarda las cookies para cookiejar
- continuar con el procesamiento
Ejemplo
var fs = require(''fs'');
var CookieJar = "cookiejar.json";
var pageResponses = {};
page.onResourceReceived = function(response) {
pageResponses[response.url] = response.status;
fs.write(CookieJar, JSON.stringify(phantom.cookies), "w");
};
if(fs.isFile(CookieJar))
Array.prototype.forEach.call(JSON.parse(fs.read(CookieJar)), function(x){
phantom.addCookie(x);
});
page.open(LoginCheckURL, function(status){
// this assumes that when you are not logged in, the server replies with a 303
if(pageResponses[LoginCheckURL] == 303)
{
//attempt login
//assuming a resourceRequested event is fired the cookies will be written to the jar and on your next load of the script they will be found and used
}
});
Tengo una autenticación requerida para golpear una URL en particular. En el navegador, necesito iniciar sesión solo una vez, ya que para otras URL relacionadas que pueden usar la identificación de la sesión de la cookie no es necesario ingresar a la página de inicio de sesión. De forma similar, ¿puedo usar la cookie generada en el archivo de cookies usando --cookies-file=cookies.txt
en la línea de comando en phantomjs para abrir otra página que requiera el mismo detalle de cookie?
Por favor recomiende.
El archivo creado por la opción --cookies-file=cookies.txt
se serializa desde CookieJar: hay caracteres adicionales y a veces es difícil de analizar.
Puede verse así:
[General]
cookies="@Variant(/0/0/0/x7f/0/0/0/x16QList<QNetworkCookie>/0/0/0/0/x1/0/0/0/v/0/0/0{__cfduid=da7fda1ef6dd8b38450c6ad5632...
Utilicé en el pasado phantom.cookies . Esta matriz se completará previamente con los datos de cookies existentes almacenados en el archivo de cookies especificado en las opciones de configuración de inicio / línea de comandos de PhantomJS, si corresponde. Pero también puede agregar cookies dinámicas usando phantom.addCookie .
Un ejemplo básico es
phantom.addCookie({
''name'': ''Valid-Cookie-Name'', /* required property */
''value'': ''Valid-Cookie-Value'', /* required property */
''domain'': ''localhost'', /* required property */
''path'': ''/foo'',
''httponly'': true,
''secure'': false,
''expires'': (new Date()).getTime() + (1000 * 60 * 60) /* <-- expires in 1 hour */
});
Con estos métodos, no es tan difícil implementar su propia lógica de administración de cookies.