2016-06-08 6 views
0

Веб-страница, на которой я пытаюсь получить данные, заполняет контент контентом ajax на определенную страницу. Соответствующий вызов выглядит так:php cURL Имитация звонков Ajax

$.ajax({   
    type: 'POST', 
    dataType: "json", 
    data: Data, 
    url: '/example-ajax.aspx', 
    timeout: _defaultTimeOut, 
... 

И это запрос HTTP (за исключением почтовых данных):

POST /example-ajax.aspx HTTP/1.1 
Host: *website* 
Connection: keep-alive 
Content-Length: 83 
Accept: application/json, text/javascript, */*; q=0.01 
Origin: *http://website* 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,  like Gecko) Chrome/51.0.2704.79 Safari/537.36 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Referer: *referrer* 
Accept-Encoding: gzip, deflate 
Accept-Language: tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4 
Cookie: *very long cokie* 

Я также могу получить соответствующее содержание с Почтальон инструмента только с установкой почтовых значений по с заголовками referrer, origin и host.

Что я делаю с libcurl: сначала подключитесь к странице входа с информацией о регистрации и сохраните файл cookie в cookiejar. Затем я отправляю запрос на вышеупомянутую страницу ajax, но он возвращает данные json с параметром {Error: Unauthorized}. В локальных или веб-хранилищах нет токенов или чего-либо еще, только cookie. Итак, как сервер может различать браузер и запрос cURL?

Вот мой код, чтобы получить печенье:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_NOBODY, false); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 

curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiejar); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiejar); 
//set the cookie the site has for certain features, this is optional 
curl_setopt($ch, CURLOPT_COOKIE, "cookiename=0"); 
//curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
curl_setopt($ch, CURLOPT_USERAGENT, 
    "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_REFERER, "http://example.com"); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Host: example.com', 
    'Origin: http://example.com' 
    )); 

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo) 

А вот моя просьба:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_URL, $url; 

curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiejar); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_REFERER, "http://example.com"); 
curl_setopt($ch, CURLOPT_USERAGENT, 
    "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"); 

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Host: example.com', 
    'Origin: http://example.com', 
    'X-Requested-With:XMLHttpRequest', 
    'Accept:application/json, text/javascript, */*; q=0.01', 
    'Accept-Language:tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4', 
    'Cache-Control:max-age=0', 
    'Connection:keep-alive', 
    'Content-Length:83', 
    'Content-Type:application/x-www-form-urlencoded; charset=UTF-8', 
    )); 

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo); 
$result = curl_exec($ch); 
curl_close($ch); 

ответ

1

Сразу после я отправил вопрос, я обнаружил, что просто отправив Проблема GET вместо POST решает проблему. Но почему-то как почтальон, так и браузер отправляют запрос POST для получения контента, я думал, что тоже должен делать это с cURL. Я ошибался.

Смежные вопросы