PHP: Имитация XHR с помощью cURL


Сегодня я пытаюсь выполнить задание cron для входа на какой-нибудь форум, чтобы проверить онлайн-статистику. Тот login.php скрипт принимает ajax-запрос с отправленными в форме значениями: пользователь, пароль, сервер и идентификатор хэша (в скрытом поле). Я уже могу отправить значения в сценарий входа в систему, а также сохранить сеанс с помощью куки-файла, но когда я пытаюсь передать необходимые параметры (исходящие из sendlogin.php ), похоже, он отклоняет запросы, которые не поставляются с соответствующими заголовками запросов. Поэтому мне нужно чтобы узнать, как я мог бы смоделировать это с помощью 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

Надеюсь, вы могли бы помочь мне в этом.

Author: VeeBee, 2011-05-12

2 answers

В PHP api для curl вы можете использовать:

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"
));

Но вашей реальной проблемой может быть файл cookie:, который я исключил выше. Настройте свой запрос на завиток с помощью COOKIEJAR. Сделайте один ложный запрос, чтобы получить текущее значение сеанса, и только после этого отправьте свой фактический запрос XHR.

 10
Author: mario, 2011-05-12 01:49:11

Этот формат массива не работает. Curl не принимает ассоциативные массивы. Каждый элемент должен быть строкой в следующем формате:

    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/"
    ));
 10
Author: Isidro Moran, 2013-03-13 21:27:22