Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Почему не качается страница через CURL. Помогите разобраться

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Непонятно почему курл не хочет скачивать страницы конкретного сайта
IOpeH
Отправлено: 28 Октября, 2019 - 15:05:46
Post Id



Частый гость


Покинул форум
Сообщений всего: 175
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




Есть функция (см ниже) через которую качаются страницы с https, но страницы одного противного сайта никак нихотят скачиваться, не могу понять почему. Напишите, плиз, что нужно поправить, чтобы заработало?
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. function curl_file_get_contents($url, $referer=''){
  3.     $url = strval($url);
  4.     /* Исправляем URL */
  5.     while(preg_match('/[а-яё]+/i', $url, $arr)){
  6.         $url = str_replace($arr[0], urlencode(iconv('windows-1251', 'utf-8', $arr[0])), $url);
  7.     }
  8.    
  9.     $referer = strval($referer);
  10.    
  11.     $result = '';
  12.    
  13.     $curl = curl_init($url);
  14.    
  15.     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  16.     curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
  17.    
  18.     curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
  19.     curl_setopt($curl, CURLOPT_HEADER, 0); /* Включать header в вывод */
  20.     curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); /* Следовать любому "Location: " header */
  21.     curl_setopt($curl, CURLOPT_TIMEOUT, 20); /* Максимальное время в секундах, для работы CURL-функций */
  22.    
  23.     $str = mt_rand(3, 55).'.'.mt_rand(0, 99);
  24.     curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:'.$str.') Gecko/20100101 Firefox/'.$str);
  25.    
  26.     if(strlen($referer)){
  27.         curl_setopt($curl, CURLOPT_REFERER, $referer);
  28.     }
  29.    
  30.     /*
  31.     curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
  32.     curl_setopt($curl, CURLOPT_PROXY, get_proxy());
  33.     */
  34.    
  35.     $result = @curl_exec($curl);
  36.    
  37.     curl_close($curl);
  38.    
  39.     $result = trim(strval($result));
  40.    
  41.     return $result;
  42. }
  43.  
  44. @$DATA = curl_file_get_contents('https://elfidel.com/');
  45. echo $DATA;
  46.  
 
 Top
andrewkard
Отправлено: 28 Октября, 2019 - 17:32:11
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)





?
 
 Top
IOpeH
Отправлено: 28 Октября, 2019 - 17:36:31
Post Id



Частый гость


Покинул форум
Сообщений всего: 175
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




andrewkard file_get_contents не работает с https, поэтому я и начал использовать curl
 
 Top
andrewkard
Отправлено: 28 Октября, 2019 - 18:30:18
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




IOpeH пишет:
file_get_contents не работает с https

с чего такое утверждение,

проверял, контент какой то есть
 
 Top
IOpeH
Отправлено: 28 Октября, 2019 - 21:09:43
Post Id



Частый гость


Покинул форум
Сообщений всего: 175
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




file_get_contents отродясь не качал ничего с https
у меня контента никакого нет, ни через file_get_contents ни через мою функцию, ни на локалке, ни на реальном сайте. И проблема именно в этом сайте, т.к. с других качается нормально.
Но так как через браузер на сайт к ним зайти можно, делаем выводы, что как то всё таки можно страницу скачать. Давайте вернёмся к способу через курл
 
 Top
andrewkard
Отправлено: 30 Октября, 2019 - 12:15:31
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




IOpeH пишет:
file_get_contents отродясь не качал ничего с https


Цитата:
В файле php.ini вы должны добавить эти строки, если они не существуют:

extension=php_openssl.dll

allow_url_fopen = On


Я же писал что проверил, у меня контент пришел.

По поводу curl, уберите глушилку ошибок @, смотрите что в https://www.php.net/manual/ru/function.curl-error.php, добавьте опцию curl_setopt($curl, CURLOPT_HEADER, true);

дебажте
 
 Top
IOpeH
Отправлено: 30 Октября, 2019 - 18:58:58
Post Id



Частый гость


Покинул форум
Сообщений всего: 175
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




andrewkard сама функция curl_file_get_contents ошибок не выдает, даже если глушилки снять. Если включить вывод заголовков CURLOPT_HEADER, то с elfidel.com даже заголовков не приходят.
curl_errno() показывает 35 ошибку
Цитата:
CURLE_SSL_CONNECT_ERROR (35)
A problem occurred somewhere in the SSL/TLS handshake. You really want the error buffer and read the message there as it pinpoints the problem slightly more. Could be certificates (file formats, paths, permissions), passwords, and others.

curl_error() выдаёт такую штуку: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

Попробовал попереключать CURLOPT_SSLVERSION, выдаёт такие результаты
1 -
Цитата:
error:1409442E:SSL routines:SSL3_READ_BYTES:tlsv1 alert protocol version

2 -
Цитата:
Unknown SSL protocol error in connection to elfidel.com:443

3 -
Цитата:
error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

4, 5 и 6 выдают -
Цитата:
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version


что с этим "добром" делать я без понятия, подскажите, кто знает
 
 Top
andrewkard
Отправлено: 01 Ноября, 2019 - 16:54:47
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




В файле php.ini вы должны добавить эти строки, если они не существуют:

extension=php_openssl.dll

Проверяли?
(Добавление)
Поиграться с версиями
PHP:
скопировать код в буфер обмена
  1.  
  2.         curl_setopt( $ch, CURLOPT_SSLVERSION, 1 );
  3.         curl_setopt( $ch, CURLOPT_SSL_CIPHER_LIST, 'TLSv1' );
  4.  
 
 Top
IOpeH
Отправлено: 01 Ноября, 2019 - 16:58:38
Post Id



Частый гость


Покинул форум
Сообщений всего: 175
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




andrewkard а для курла это тоже чтоль надо?
Я пробовал включить этот модуль, но при старте сервера там ошибки вылазят, поэтому я забил на такой способ. Другие то сайты качаются через курл с https протоколом
 
 Top
LIME
Отправлено: 02 Ноября, 2019 - 16:27:58
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




IOpeH пишет:
а для курла это тоже чтоль надо?
по идее нет
Пыховый курл юзает curllib или она там называется
IOpeH пишет:
Другие то сайты качаются через курл с https протоколом
ну значит ты дурачек?
Вопрос поставлен о курле а оказывается дело не в нем а в контенте скорее всего.
Давай уже мозги включай.
Я не чтобы обидеть а чтобы пнуть побольнее.
(Добавление)
andrewkard неее
Подумай
Это расширение надо для сокетов
Курл свою библу юзает напрямую
(Добавление)
Но это не точно
 
 Top
IOpeH
Отправлено: 02 Ноября, 2019 - 22:02:52
Post Id



Частый гость


Покинул форум
Сообщений всего: 175
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




покрутил я ещё с опциями и получается что если выставить CURLOPT_SSLVERSION в 2, и начать менять CURLOPT_SSL_CIPHER_LIST он начинает жаловаться, что не удалось установить список шифров. А если "CURLOPT_SSL_CIPHER_LIST" оставить по умолчанию, то получаем, как уже я выше писал "Unknown SSL protocol error in connection to elfidel.com:443". Мне думается что это верный пусть, вот только как узнать что там за неизвестная ошибка? я без понятия
 
 Top
LIME
Отправлено: 03 Ноября, 2019 - 01:28:48
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




IOpeH какая-то хрень кривая на их серваке похоже
Попробуй ручками через сокет получить ответ если очень надо.
Но сначала я бы проверил свою курл либу. Попробуй на другой машине, желательно с последней ос и с курлой из оф репа а не руками собранной.
(Добавление)
И еще попробуй первым делом получить курлом из терминала. Как сделать гугли. Инфы масса. Дело несложное. Курл это не пых - это библиотека и ей можно пользоваться из линуксовой консоли. Ну или виндовой если ты ламер))
 
 Top
TheCrystalMethod
Отправлено: 08 Апреля, 2024 - 15:31:39
Post Id



Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Апр. 2024  


Помог: 0 раз(а)




IOpeH пишет:
andrewkard сама функция curl_file_get_contents ошибок не выдает, даже если глушилки снять. Если включить вывод заголовков CURLOPT_HEADER, то с elfidel.com даже заголовков не приходят.
curl_errno() показывает 35 ошибку
Цитата:
CURLE_SSL_CONNECT_ERROR (35)
A problem occurred somewhere in the SSL/TLS handshake. You really want the error buffer and read the message there as it pinpoints the problem slightly more. Could be certificates (file formats, paths, permissions), passwords, and others.

curl_error() выдаёт такую штуку: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

Попробовал попереключать CURLOPT_SSLVERSION, выдаёт такие результаты
1 -
Цитата:
error:1409442E:SSL routines:SSL3_READ_BYTES:tlsv1 alert protocol version

2 -
Цитата:
Unknown SSL protocol error in connection to elfidel.com:443

3 -
Цитата:
error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

4, 5 и 6 выдают -
Цитата:
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version


что с этим "добром" делать я без понятия, подскажите, кто знает



Актуальность с ответом автору темы наверное чутка протухла, но может кто так же столкнется с похожей проблемой мой возможно поможет


У меня такая же проблема была при написани небольшого парсера для ведения статистики по неожиданных откатах контента страниц. Перебирал много разных вариантов сочетаний опций ssl для curl на РНР.

Так как простые варианты опций веерсии ssl проверки не давали результат, решил узнать а какую же версию поддерживает сервер моего сайта.

Проверка показала не свежесть продукта
Нажмите для увеличения


В итоге перебора доступных комбинаций для версии ssl нашелся вариант при котором сервер понимал что от него хотят и как общаться:
PHP:
скопировать код в буфер обмена
  1.  
  2. //используется  указание версии + указание максимально доступной для использования при запросе на сервер
  3. curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_MAX_TLSv1_0|CURL_SSLVERSION_TLSv1_0);
  4.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB