PHP функция CURL для эмуляции браузера - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь автоматизировать ежедневный просмотр группы сайтов с помощью PHP, но file_get_contents не возвращает содержимое сайта для некоторых сайтов, к которым может обратиться человек, использующий браузер (chrome, et c). .

Есть ли способ использовать curl, который будет возвращать содержимое для любого сайта, к которому кто-то, использующий URL-адрес в chrome, может получить доступ?

Например, я могу получить доступ к следующему сайту в CHROME но file_get_contents не ...

file_get_contents ("https://www.manta.com/mb_35_E31857N8_000/hydraulic_fracturing_wells");

1 Ответ

0 голосов
/ 07 марта 2020

file_get_contents не будет работать, так как некоторые сайты проверяют user-agent, куки, реферер и другие вещи, чтобы убедиться, что нет автоматического запроса. Вы можете достичь этого, используя curl. Пример кода будет как ниже без проверки ошибок

function makeRequest($url)
{

  $c=__DIR__ . '/cookie.txt';
  $headerArray=array("Accept-Encoding: gzip, deflate, br","Accept-Language: en-GB,en-US;q=0.9,en;q=0.8","Connection: Keep-Alive","Cache-Control: no-cache","Expect:");

  $userAgent="Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36";
  $httpcode = 0;
  $ch=curl_init();
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  curl_setopt($ch,CURLOPT_ENCODING,"");
  curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
  curl_setopt ($ch, CURLOPT_COOKIEJAR, $c);
  curl_setopt($ch, CURLOPT_COOKIEFILE, $c);
  curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
  curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
  $html=curl_exec($ch);
  $info=curl_getinfo($ch);
  $httpcode=(int)$info['http_code'];
  curl_close($ch);
  return $html;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...