Как смоделировать реальный запрос из браузера с помощью CURL? - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь смоделировать реальный запрос браузера, используя CURL с прокси ротацией, я искал об этом, но ни один из ответов не сработал.

Вот код:

<code>$url= 'https://www.stubhub.com/';
$proxy = '1.10.185.133:30207';
$userAgent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36';

$curl = curl_init();
curl_setopt( $curl, CURLOPT_URL, trim($url) );
curl_setopt($curl, CURLOPT_REFERER, trim($url));
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, TRUE );
curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, TRUE );
curl_setopt( $curl, CURLOPT_CONNECTTIMEOUT, 0 );
curl_setopt( $curl, CURLOPT_TIMEOUT, 0 );
curl_setopt( $curl, CURLOPT_AUTOREFERER, TRUE );
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
$cacert='C:/xampp/htdocs/cacert.pem';
curl_setopt( $curl, CURLOPT_CAINFO, $cacert );
curl_setopt($curl, CURLOPT_COOKIEFILE,__DIR__."/cookies.txt");
curl_setopt ($curl, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt');
curl_setopt($curl, CURLOPT_MAXREDIRS, 5);
curl_setopt( $curl, CURLOPT_USERAGENT, $userAgent );

//Headers
$header = array();
$header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$header[] = "Accept-Language: cs,en-US;q=0.7,en;q=0.3";
$header[] = "Accept-Encoding: utf-8";
$header[] = "Connection: keep-alive";
$header[] = "Host: www.gumtree.com";
$header[] = "Origin: https://www.stubhub.com";
$header[] = "Referer: https://www.stubhub.com";

curl_setopt( $curl, CURLOPT_HEADER, $header );
curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, TRUE);
curl_setopt($curl, CURLOPT_PROXY, $proxy);
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
$data = curl_exec( $curl );
$info = curl_getinfo( $curl );
$error = curl_error( $curl );

echo '<pre>';
print_r($all);
echo '
';

Вот что я получаю, когда запускаю скрипт:

Array
(
    [data] => HTTP/1.1 200 OK

HTTP/1.0 405 Method Not Allowed
Server: nginx
Content-Type: text/html; charset=UTF-8
Accept-Ranges: bytes
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Cache-Control: private, no-cache, no-store, must-revalidate
Surrogate-Control: no-store, bypass-cache
Content-Length: 9411
X-EdgeConnect-MidMile-RTT: 203
X-EdgeConnect-Origin-MEX-Latency: 24
Date: Sat, 03 Nov 2018 17:15:56 GMT
Connection: close
Strict-Transport-Security: max-age=31536000; includeSubDomains

[info] => Array
        (
            [url] => https://www.stubhub.com/
            [content_type] => text/html; charset=UTF-8
            [http_code] => 405
            [header_size] => 487
            [request_size] => 608
            [filetime] => -1
            [ssl_verify_result] => 0
            [redirect_count] => 0
            [total_time] => 38.484
            [namelookup_time] => 0
            [connect_time] => 2.219
            [pretransfer_time] => 17.062
            [size_upload] => 0
            [size_download] => 9411
            [speed_download] => 244
            [speed_upload] => 0
            [download_content_length] => 9411
            [upload_content_length] => -1
            [starttransfer_time] => 23.859
            [redirect_time] => 0
            [redirect_url] => 
            [primary_ip] => 1.10.186.132
            [certinfo] => Array
                (
                )

            [primary_port] => 42150
            [local_ip] => 192.168.1.25
            [local_port] => 59320
        )

    [error] => 
)

Как и рекапча, Как говорится:

Due to high volume of activity from your computer, our anti-robot software has blocked your access to stubhub.com. Please solve the puzzle below and you will immediately regain access.

Когда я захожу на веб-сайт с помощью любого браузера, отображается веб-сайт.

Но с помощью приведенного выше сценария это не так.

Так что же мне не хватает, чтобы сделать запрос curl реальным запросом браузера и не быть обнаруженным как бот?

Или, если есть API / библиотека, которая может это сделать, пожалуйста, укажите это.

Устранит ли эта проблема Guzzle или аналогичные проблемы?

1 Ответ

0 голосов
/ 04 ноября 2018

«Так чего же мне не хватает, чтобы сделать запрос curl похожим на запрос реального браузера»

Полагаю, они используют простую проверку файлов cookie. Есть более сложные методы, которые позволяют распознавать автоматизацию, такую ​​как cURL, с высокой степенью надежности, особенно в сочетании со списками прокси-IP-адресов или IP-адресов известных устройств.

Ваш первый шаг - перехватить исходящий запрос браузера, используя pcap или что-то подобное, а затем попытаться скопировать его, используя cURL.

Еще одна простая вещь, чтобы проверить, была ли ваша банка печенья заполнена каким-то контрольным сигналом. Я тоже так обычно делаю, так как большинство сценариев в Интернете просто копируют и не обращают особого внимания на эти детали.

То, что наверняка заставит вас отскочить от любой из моих систем, это то, что вы отправляете реферера, но вы, похоже, на самом деле не подключились к первой странице. Вы практически говорите «Хорошо встретились снова» серверу, который видит вас впервые. Возможно, вы сохранили cookie-файл от этой первой встречи, и теперь этот файл cookie был признан недействительным (фактически помечен как «злой») каким-либо другим действием. По крайней мере, в начале, всегда повторяйте последовательность посещений с чистого листа.

Вы можете попытаться адаптировать этот ответ , также на основе cURL. Всегда проверяйте фактический трафик, используя прокси-сервер MitM для декодирования SSL .

Теперь ответ real - зачем вам эта информация для ? Вы можете получить это где-нибудь еще? Можете ли вы попросить об этом явно, возможно, достичь соглашения с исходным сайтом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...