Я пытаюсь очистить сайт, который фактически блокирует Bots.
У меня есть этот код в PHP cURL, чтобы уйти с блокировкой.
$headers = array( 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding: zip, deflate, sdch' , 'Accept-Language:en-US,en;q=0.8' , 'Cache-Control:max-age=0', 'User-Agent:' . $user_agents[array_rand($user_agents)] ); curl_setopt($curl_init, CURLOPT_URL, $url); curl_setopt($curl_init, CURLOPT_HTTPHEADER, $headers); $output = curl_exec($curl_init);
Это работает хорошо.
Но я использую PHP Goutte , я хочу сгенерировать тот же запрос, используя эту библиотеку
$headers2 = array( 'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding' => 'zip, deflate, sdch' , 'Accept-Language' => 'en-US,en;q=0.8' , 'Cache-Control' => 'max-age=0', 'User-Agent' => $user_agents[array_rand($user_agents)] ); $client = new Client(); foreach ($headers2 as $key => $v) { $client->setHeader($key, $v); } $resp = $client->request('GET', $url); echo $resp->html();
Но, используя этот код, я блокируюсь с сайта, который я соскабливаю.
Я хочу знать, как я могу использовать Gouttee для правильного использования заголовков?
Можете ли вы попробовать проверить результат Goutte
$status_code = $client->getResponse()->getStatus(); echo $status_code;
Это исходный код. У меня был успех с Guzzle In index.php
<?php ini_set('display_errors', 1); ?> <html> <head><meta charset="utf-8" /></head> <?php $begin = microtime(true); require 'vendor/autoload.php'; require 'helpers/helper.php'; $client = new GuzzleHttp\Client([ 'base_uri' => 'http://www.yellowpages.com.au', 'cookies' => true, 'headers' => [ 'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding' => 'zip, deflate, sdch', 'Accept-Language' => 'en-US,en;q=0.8', 'Cache-Control' => 'max-age=0', 'User-Agent' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0' ] ]); $helper = new Helper($client); $mostViewed = $helper->getPageTest(); ?> <html>
В файле helper.php
<?php use GuzzleHttp\ClientInterface; use Symfony\Component\DomCrawler\Crawler; class Helper{ protected $client; protected $totalPages; public function __construct(ClientInterface $client){ $this->client = $client; $this->totalPages = 3; } public function query() { $queries = array( 'clue' => 'Builders', 'locationClue' => 'Sydney%2C+2000', 'mappable' => 'true', 'selectedViewMode' => 'list' ); // print_r($queries); return $this->client->get('search/listings', array('query' => $queries)); } public function getPageTest() { $responses = $this->query(); $html = $responses->getBody()->getContents(); echo $html; exit(); } } ?>
И результат, который я получил
Надеюсь, что это полезно !!!