Есть конкретный веб-сайт, с которого я хочу получить исходный код с помощью PHP cURL.
Посещение этого веб-сайта с помощью Bowser с моего компьютера работает без каких-либо проблем.
Но когда я хочузайдите на этот сайт с помощью моего PHP-скрипта, веб-сайт распознает, что это автоматический запрос, и отобразит сообщение об ошибке.
Это мой PHP-скрипт:
<?php
$url = "https://www.example.com";
$user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.1 Safari/605.1.15";
$header = array('http' => array('user_agent' => $user_agent));
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
echo $data;
?>
Пользовательский агент такой жеЯ также использую с браузером. Я использую локальный сервер с MAMP PRO. Это означает, что я использую один и тот же IP-адрес как для доступа к браузеру, так и для доступа к сценариям PHP.
Я уже пробовал свой сценарий PHP со многими различными заголовками и параметрами, но ничего не работало.
Необходимобыть тем, что делает доступ к PHP-скрипту отличным от доступа к браузеру, для веб-сервера, с которого я хочу, чтобы получить доступ к веб-сайту. Но что? У вас есть идея?
РЕДАКТИРОВАТЬ
Я обнаружил, что она работает с этим cURL:
curl 'https://www.example.com/' -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36' -H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' -H 'accept-language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7'
Если я наберу это, например,Терминал, он показывает правильный исходный код.
Я преобразовал его в скрипт PHP следующим образом:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.example.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
$headers = array();
$headers[] = 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36';
$headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3';
$headers[] = 'Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
К сожалению, таким образом он все еще показывает сообщение об ошибке.
Это означает, что должно быть все, что делает доступ к командной строке отличным от доступа к браузеру, для веб-сервера, с которого я хочу, чтобы получить доступ к веб-сайту. Но что это?