Ermolov
@Ermolov
Начинающий Full Stack разработчик

Php cUrl ничего не возвращает, а в браузере все ок. Как исправить?

Подскажите, что я делаю не так. Все перепробовал, но в ответ пустая страница во время запроса в скрипте, хотя обычным запросом из браузера сервер отвечает как надо , в Json. Вот мой код, добавил так же отправляемые заголовки. Но ничего не помогает.

<?php
$createdURL = 'https://www.copart.com/public/data/lotdetails/solr/59418659';

 $request_headers = array(
                   'Host: www.copart.com',
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding: gzip, deflate, br',
'Connection: keep-alive',
'Cookie: visid_incap_242093=nc/OqfKIQmmLk9tEunGJJrAbMF4AAAAAQUIPAAAAAAAQhxsESHvNQvPl5hjVRxCz; incap_ses_728_242093=QC8+EQMw0xIXs76fR2EaCnSoMF4AAAAAzhEXbXk3KydqFbDSXl0SmQ==; g2usersessionid=c901d8adfa52c9b09d14dc2739a50a69; G2JSESSIONID=B50447E0E9183D9B46EF816E545DCA2B-n2; userLang=ru; copartTimezonePref=%7B%22displayStr%22%3A%22MSK%22%2C%22offset%22%3A3%2C%22dst%22%3Afalse%2C%22windowsTz%22%3A%22Europe%2FMinsk%22%7D; timezone=Europe%2FMinsk; s_fid=27A11EFC86E71F22-2C2A9283A70DC6D9; s_nr=1580247775869-Repeat; s_vnum=1582803128535%26vn%3D3; s_lv=1580247775871; s_cc=true; s_vi=[CS]v1|2F180DDC8515E7C6-40000683205B32E5[CE]; s_ppv=member%253Alotdetails%2C51%2C23%2C1428%2C1920%2C611%2C1920%2C1080%2C1%2CP; _gcl_au=1.1.1490525727.1580211133; _fbp=fb.1.1580211133841.104819497; _ga=GA1.2.1375809776.1580211129; _gid=GA1.2.1380578311.1580211134; __cfduid=d8dce09585c6f8be68cb198bcec67ce2c1580211135; s_ppvl=member%253Avehiclefinder%2C94%2C46%2C1019%2C1920%2C611%2C1920%2C1080%2C1%2CP; s_sq=%5B%5BB%5D%5D; s_ev1=web_vf_ru_authorized_rep_ukraine_ru; __gads=ID=18855e833b76b508-2248df9e69b30098:T=1580247826:S=ALNI_MY8OLUxZdHDQMCuNkKIyRq6hcHxcA; usersessionid=b8d4872aca78e4e741920941deb62716; OAGEO=UA%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C; OAID=8fdc34a0f3a1be7f54a4cf4b01811977; copartseller_sticky=3c64d2de0386823206b7f9c2f630d7ce; C2BID=623410; g2app.username=; AJSESSIONID=41c0308e4230dd9dc9763218ca8ce5f8',
'Upgrade-Insecure-Requests: 1',
'Pragma: no-cache',
'Cache-Control: no-cache',
                );

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $createdURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);

curl_close($ch);
echo $data = json_decode($result);
?>
  • Вопрос задан
  • 2828 просмотров
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Вобщем что-бы сервер начал отдавать контент - надо разок обратиться к этому самому _Incapsula_Resource... Потом он запоминает клиента, и даже куки не нужны, контент всё равно прёт.
<?php

$createdURL = curl("https://www.copart.com/public/data/lotdetails/solr/59418659");
if (preg_match("#<script src=\"(/_Incapsula_Resource\?[^\"]+)\">#", $createdURL, $regs))
{
    curl("https://www.copart.com{$regs[1]}");
    $createdURL = curl("https://www.copart.com/public/data/lotdetails/solr/59418659");
}
echo $createdURL;
unlink("/tmp/cookie.txt");

function curl($url){
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookie.txt");
    curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookie.txt");

    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Sedbol
@Sedbol
Надо делать все через обращение curl

<?php
$createdURL =curl( 'https://www.copart.com/public/data/lotdetails/solr/59418659');


echo $createdURL;

function curl($url){
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $response = curl_exec($ch);
    curl_close($ch);
    return $response;
}
?>
Ответ написан
pligin
@pligin
быдлокодер
json_decode() возвращает объект.
echo выводит строку.
Поэтому echo $data = json_decode($result); ничего не выводит.
Чтобы увидеть содержимое полученного результата
$data = json_decode($result);
print_r($data);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы