Замена PHP Curl на Wget
Так получилось, что иногда пишу парсеры сайтов на PHP. Использую обычный PHP Curl, густо обмазанный различными вспомогательными классами. Всё было хорошо, но однажды один из скриптов перестал работать. Стал разбираться почему — PHP стал падать с ошибкой сегментирования (segmentation fault) при вызове:
1 |
$res=curl_exec($ch); |
Стал разбираться. Выяснил что перестаёт падать после комментирования строчки:
1 |
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); |
Явно что-то не так с шифрованием. Вспомнил даже, что нечто подобное уже было. Проверил — точно сайт стал шифроваться по протоколу ГОСТ:

И собственно в тот раз проблема решилась а в этот раз таки уже нет. Когда попробовал добавить ключ с указанием версии шифрования, скрипт стал бесконечно висеть.
1 |
curl_setopt ($ch, CURLOPT_SSLVERSION , CURL_SSLVERSION_TLSv1_3); |
И из консоли в том числе:
1 |
curl --insecure --tlsv1.3 'https://кацукацук/' |
Ну ладно. Пойдем другим путём. Проверив как открывается этот-же сайт при помощи wget, и убедившись, что с ним всё хорошо, понял что при помощи его работа в принципе будет даже проще. Всё свелось к комбинации сточек вида (конкретно тут для примера без обработки ошибок):
1 2 3 4 5 6 |
function reqwest($url,$param){ $res=`wget --save-cookies cookies.txt --keep-session-cookies --load-cookies cookies.txt '$url' -O tmp.html --post-data '$param' --header 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8'`; $html= file_get_contents("tmp.html"); return $html } |