2011-05-12 22 views
6

Hoy intento hacer un trabajo de cron para iniciar sesión en el foro para verificar las estadísticas en línea. La secuencia de comandos login.php acepta una solicitud ajax con los valores ingresados ​​en el formulario: usuario, contraseña, servidor y una identificación hash (en un campo oculto). Ya puedo enviar los valores al script de inicio de sesión y también conservar la sesión utilizando un cookie jar pero cuando intento pasar los parámetros necesarios (procedentes de sendlogin.php), parece rechazar solicitudes que no vienen con los encabezados de solicitud adecuados . Así que necesito saber cómo puedo simular esto usando cURL:PHP: Simulate XHR using cURL

GET login.php?user=foo&password=bar&server=1&id=7131c359e534e3790eaefa495d621b2a HTTP/1.1 

Host: someloginserver.com 
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 
Accept: application/json, text/javascript, */*; q=0.01 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip, deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Connection: keep-alive 
X-Requested-With: XMLHttpRequest 
Referer: http://someloginserver.com/sendlogin.php 
Cookie: __cfduid=de2fe207593d1135fc2426fb06e3270741303115848; hellobar_current=1300711502; hellobar_1300711502_variation=11462; PHPSESSID=cc621c6f57c43130d51d3147e319d8c2 

Espero que me puedan ayudar en esto.

+0

pasar los encabezados correspondientes a 'curl_setopt ($ curlHandle, 'CURLOPT_HTTPHEADER', $ headersArray);'. Active el registro detallado curl curl. Revise hasta que las salidas cURL de los encabezados coincidan con lo que espera. –

Respuesta

9

en la API de PHP para rizar puede utilizar:

curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    "Host" => "someloginserver.com", 
    "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1", 
    "Accept" => "application/json, text/javascript, */*; q=0.01", 
    "Accept-Language" => "en-us,en;q=0.5", 
    "Accept-Encoding" => "gzip, deflate", 
    "Accept-Charset" => "ISO-8859-1,utf-8;q=0.7,*;q=0.7", 
    "Keep-Alive" => "115", 
    "Connection" => "keep-alive", 
    "X-Requested-With" => "XMLHttpRequest", 
    "Referer" => "http://someloginserver.com/sendlogin.php" 
)); 

Pero el problema real puede ser la cookie :, que he excluido anteriormente. Configure su solicitud de cURL con un COOKIEJAR. Haga una solicitud falsa para obtener un valor de sesión actual, y solo después envíe su solicitud de XHR real.

+0

ok parece tener razón acerca de mí, ¿quién va a tener problemas con la cookie? descubrí que en sendlogin.php, hay un archivo javascript que agrega 2 nuevas variables de cookies: hellobar_current y hellobar_1300711502_variation, por lo que la pregunta ahora es, ¿cómo incluyo esos javascript en los cookies agregados? – VeeBee

+0

Puede reutilizar un archivo de cookie preconfigurado de Firefox o usar 'CURLOPT_COOKIE' para inyectar los otros dos manualmente. Sin embargo, dudo que esas dos cookies sean relevantes para la autorización. – mario

+0

ok ahora puedo inyectar las cookies adicionales pero no parecen guardarse en la cookiejar. aquí está mi fragmento de código: http://pastebin.com/FZb9mfKZ – VeeBee

10

Ese formato de matriz no funciona. Curl no acepta matrices asociativas. Cada elemento debe ser una cadena con el siguiente formato:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     "Host: www.somehost.com", 
     "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1", 
     "Accept: application/json, text/javascript, */*; q=0.01", 
     "Accept-Language: en-us,en;q=0.5", 
     "Accept-Encoding: gzip, deflate", 
     "Connection: keep-alive", 
     "X-Requested-With: XMLHttpRequest", 
     "Referer: http://www.somehost.com/" 
    )); 
+0

Eso es correcto. – andreszs