Intereting Posts
Справка по доступу к атрибуту xml в php Глобальное промежуточное ПО Laravel не может получить сеанс Нужен полный пример для DynamoDB с php Как проверить, содержит ли строка определенное слово? Laravel 5.2 artisan optimize – php_strip_whitespace не удалось открыть поток: никаких дочерних процессов Как предотвратить подгрузку http-запросов, если содержимое является приватным? (в основном разрешают только запросы от моего интерфейса, а не от браузера) Счет электронной почты WooCommerce: условные «политики» на основе категории продуктов Почему идентичный PHP-скрипт может работать в одном поддомене, а не в другом? Laravel – Изменить подключение к базе данных для определенного URL-адреса? Сессии PHP: проблема с кнопкой «Назад» PHP отправить электронную почту foreach – отправить Каковы преимущества создания хранимых процедур в SQL и MySQL? cURL не отправляет данные POST, но работает нормально в терминале PHP simplexml xpath ищет значение в ELEMENT, содержащем текст с разделителями табуляции? nginx + php-fpm = Файл не найден

Как отправить пользовательские заголовки с помощью PHP Gouttee

Я пытаюсь очистить сайт, который фактически блокирует 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 для правильного использования заголовков?

Solutions Collecting From Web of "Как отправить пользовательские заголовки с помощью PHP 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(); } } ?> 

И результат, который я получил

введите описание изображения здесь

Надеюсь, что это полезно !!!