Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (php, cUrl). cURL не получает полную информацию с сервера. / 15 сообщений из 15, страница 1 из 1
15.12.2018, 16:34
    #39748410
zadov2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(php, cUrl). cURL не получает полную информацию с сервера.
Привет!

Есть url : https: //shop.donaldson.com/store/ru-ru/product/P550299/20271
- в браузер идёт полная красивая инфа.
- а через cURL (а так-же кэш гугла, например) получают только треть инфы с этого сервера - часть данных не поступает.

Пытался заголовками через cURL полностью "мимикрировать" под свой браузер: безрезультатно.
Сертификаты не подключал (не знаю как, думаю не в них дело, раз идёт загрузка) : CURLOPT_SSL_VERIFYPEER => false

Как думаете реально получить через cURL то, что можно получить через браузер?
...
Рейтинг: 0 / 0
15.12.2018, 19:04
    #39748433
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(php, cUrl). cURL не получает полную информацию с сервера.
Открываю страницу в браузере, жму Ctrl+S, сохранить только HTML - итоговый размер файла 105057 байт.
Из консоли тот же адрес без мимикрирований:
Код: plaintext
1.
2.
$ curl 'https://********/store/ru-ru/product/P550299/20271' 2>/dev/null | wc -c
97823
Ну да, в несколько килобайт есть разница, но никак не на две трети.
...
Рейтинг: 0 / 0
15.12.2018, 19:44
    #39748445
zadov2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(php, cUrl). cURL не получает полную информацию с сервера.
Ну, я не взвешивал - оценивал подгруз визуально ("контентно, информативно") - если так можно выразиться. Самое тяжёлое там скрипты и картинка с фильтром - их cURL подгружает, а, например, размер этого фильтра (и применимость) - уже нет.

Сорри, что не совсем ясно в начале выразился...
...
Рейтинг: 0 / 0
15.12.2018, 20:41
    #39748457
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(php, cUrl). cURL не получает полную информацию с сервера.
zadov2008оценивал подгруз визуально ("контентно, информативно")Чем байты не устроли? Точнее и информативнее уж некуда.

zadov2008скрипты и картинка с фильтром - их cURL подгружает, а, например, размер этого фильтра (и применимость) - уже нетКакой URL дадите курлу для загрузки - такой и будет скачивать. По крайней мере, будет пытаться. Дали URL HTML-кода - он и будет запрошен и, возможно, получен. Требуется что-то ещё - указывайте конкретные URLы нужного. В ряде случаев для полноты "прикинуться браузером" потребуется поддержка куков и соблюдение последовательности запросов. Всю веб-страницу целиком (включая скрипты, стили, картинки и т.д.) за один запрос curl скачивать не умеет. Если очень надо получить веб-страницу (или сайт) целиком - это умеет wget.
...
Рейтинг: 0 / 0
15.12.2018, 21:10
    #39748464
zadov2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(php, cUrl). cURL не получает полную информацию с сервера.
vkle, именно на этом сайте стоит защита от cURL . (многие, я видел, в форумах спрашивали как защитить сайт от cURL (количеством обращений, таймаутом и т.д.) - вот тут они могут посмотреть как эта защита работает в живую).

от cURL нужен только скачаный HTML-код (без стилей, картинок и т.д.) Но часть HTML-кода - защищена от cURL :

Вот середина html-кода при исследовании элемента браузером :
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
<div class="container">
	<h4> Атрибуты (характеристики)</h4>
	<table class="table table-striped">
		<tbody>
			<tr style="display: table-row;">
				<td>Наружный диаметр</td>
				<td>79 мм (3.11 Дюймы)</td>
			</tr>
			<tr style="display: table-row;">
				<td>Внутренний диаметр</td>
				<td>43 мм (1.69 Дюймы)</td>
			</tr>
			<tr style="display: table-row;">
				<td>Длина</td>
				<td>324 мм (12.76 Дюймы)</td>
			</tr>
			<tr style="display: none;">
				<td>Эффективность, определяемая коэффициентом «бета», 1000</td>
				<td>9 МИКРОН</td>
			</tr>
			<tr style="display: none;">
				<td>Тип наполнителя</td>
				<td>Синтетические</td>
			</tr>
			<tr style="display: none;">
				<td>Вид конструкции</td>
				<td>Картридж</td>
			</tr>
			<tr style="display: none;">
				<td>Область основного применения</td>
				<td>ALLISON 23018850</td>
			</tr>
		</tbody>
	</table>
</div>



Вот этот-же кусок у cURL :
Код: html
1.
2.
3.
4.
5.
<div class="container">
	<h4> Атрибуты (характеристики)</h4>
	<table class="table table-striped">
	</table>
</div>



Я уже много-чего перепробовал, чтобы подобрать правильные параметры cURL, чтобы меня восприняли как браузер - не смог...
...
Рейтинг: 0 / 0
15.12.2018, 21:29
    #39748465
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(php, cUrl). cURL не получает полную информацию с сервера.
zadov2008на этом сайте стоит защита от cURL Глупости. Существует масса способов защиты от ботов, от "быстрого" скачивания, но "защита от cURL"...
Ладно, напишите своего клиента, не так уж оно и сложно. И пусть только этот сайт попробует не отдать правильный контент этому самописному клиенту!
...
Рейтинг: 0 / 0
15.12.2018, 21:41
    #39748470
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(php, cUrl). cURL не получает полную информацию с сервера.
zadov2008Вот этот-же кусок у cURL :Вот тот же кусок кода при просмотре в браузере по Ctrl+U
Код: sql
1.
<div class="container"> <h4> Атрибуты (характеристики)</h4> <table class="table table-striped"> </table> </div>

Чем он отличается от вашего курлового?
...
Рейтинг: 0 / 0
15.12.2018, 21:42
    #39748472
zadov2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(php, cUrl). cURL не получает полную информацию с сервера.
vkle, клиента за основу взял вот этого :
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
    function get_url( $url )
    {
        $user_agent='Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0';

        $options = array(

            CURLOPT_CUSTOMREQUEST  =>"GET",        //set request type post or get
            CURLOPT_POST           =>false,        //set to GET
            CURLOPT_USERAGENT      => $user_agent, //set user agent
            CURLOPT_COOKIEFILE     =>"cookie.txt", //set cookie file
            CURLOPT_COOKIEJAR      =>"cookie.txt", //set cookie jar
            CURLOPT_RETURNTRANSFER => true,     // return web page
            CURLOPT_HEADER         => false,    // don't return headers
            CURLOPT_FOLLOWLOCATION => true,     // follow redirects
            CURLOPT_ENCODING       => "",       // handle all encodings
            CURLOPT_AUTOREFERER    => true,     // set referer on redirect
            CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
            CURLOPT_TIMEOUT        => 120,      // timeout on response
            CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
			CURLOPT_SSL_VERIFYPEER	=> false,
        );

        $ch      = curl_init( $url );
        curl_setopt_array( $ch, $options );
        $content = curl_exec( $ch );
        $err     = curl_errno( $ch );
        $errmsg  = curl_error( $ch );
        $header  = curl_getinfo( $ch );
        curl_close( $ch );

        $header['errno']   = $err;
        $header['errmsg']  = $errmsg;
        $header['content'] = $content;
        return $header;
    }

	$result = get_url( $url );
	print_r($result);


дописывая его разными свойствами (нужными и не нужными). Пока url не победил :)
...
Рейтинг: 0 / 0
15.12.2018, 21:45
    #39748473
zadov2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(php, cUrl). cURL не получает полную информацию с сервера.
vklezadov2008Вот этот-же кусок у cURL :Вот тот же кусок кода при просмотре в браузере по Ctrl+U
Код: sql
1.
<div class="container"> <h4> Атрибуты (характеристики)</h4> <table class="table table-striped"> </table> </div>

Чем он отличается от вашего курлового?
Тем, что отсутствует
Код: html
1.
<tbody> куча данных </tbody>
...
Рейтинг: 0 / 0
15.12.2018, 21:53
    #39748474
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(php, cUrl). cURL не получает полную информацию с сервера.
zadov2008Пока url не победил :)И не победите. До тех пор, пока очень внимательно не изучите, как работает эта веб-страничка и какие меры приняты для защиты от скачивания ее фрагментов. Перечитайте предыдущую фразу очень внимательно, каждое слово там имеет значение. Защита есть, но не там, где Вы ее пытаетесть "обойти".

zadov2008Тем, что отсутствуетМаксимум, что отсутствует - это переводы строки. Всё остальное - идентично. Читайте посты внимательно, а не по диагонали.
...
Рейтинг: 0 / 0
15.12.2018, 22:21
    #39748483
zadov2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(php, cUrl). cURL не получает полную информацию с сервера.
Данные там подгружает js-скрипт и вставляет данные в таблицу (см. скрин). В этом и защита, вернее в том, что скрипт подгружает данные в таблицу, только когда пользователь серфит страницу. (ни сохраняет, ни смотрит исходный код, ни лезет с помощью cUrl... а классически открыл браузером).
...
Рейтинг: 0 / 0
15.12.2018, 22:54
    #39748502
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(php, cUrl). cURL не получает полную информацию с сервера.
Мыслите в правильном направлении.
Курл понятия не имеет о яваскрипте.
Веб-браузер имеет и умеет выполнять яваскрипт, который принимает участие в формировании документа.

zadov2008В этом и защитаНу, блин... Защита от Вас лично - наверно уже в этом месте начинается. Для остальных, кто интересуется в веб-технологиях, подгрузка фрагментов страницы отдельными частями - это довольно распространенная технология.
...
Рейтинг: 0 / 0
15.12.2018, 23:20
    #39748512
zadov2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(php, cUrl). cURL не получает полную информацию с сервера.
что ж... если у кого будут идеи по этой теме, пишите...
js && cURL проблема распространённая и не такая простая - судя по нарытым темам в форумах. :)
...
Рейтинг: 0 / 0
16.12.2018, 01:13
    #39748541
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(php, cUrl). cURL не получает полную информацию с сервера.
zadov2008js && cURL проблема распространённаяНе ищите проблему там, где её нет. Курл в принципе не поддерживает яваскрипт.

Соответственно, Вам либо следует вовсе отказаться от использования "только curl" и посмотреть в другую сторону. Либо, следует писать скрипты, которые будут эмулировать поведение веб-браузера в соответствии с действиями яваскриптов - как минимум, формировать дополнительные запросы к вебсерверу и собирать страницу воедино.

В качестве альтернатив - попробуйте поискать консольный веб-браузер с поддержкой яваскрипта (js не все поддерживают) или обратите внимание на phantomjs или аналогичное ПО.

Если тырилка контента на винде работать будет - можно IE задействовать, он легко управляется через COM (последние версии не пробовал, но раньше проблем не было).
...
Рейтинг: 0 / 0
16.12.2018, 01:23
    #39748542
zadov2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(php, cUrl). cURL не получает полную информацию с сервера.
vkle, спасибо! попробую ...
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (php, cUrl). cURL не получает полную информацию с сервера. / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]