Странная проблема CURL с определенным сертификатом SSL веб-сайта - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь использовать CURL для получения веб-страниц с сайта paricualr, однако выдает эту ошибку:

curl -q -v -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://www.saiglobal.com/ --output ./Downloads/test.html
....
*  SSL certificate verify ok.
} [5 bytes data]
> GET / HTTP/1.1
> Host: www.saiglobal.com
> User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
> Accept: */*
> 
  0     0    0     0    0     0      0      0 --:--:--  0:11:53 --:--:--     0* OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104
* stopped the pause stream!
  0     0    0     0    0     0      0      0 --:--:--  0:11:53 --:--:--     0
* Closing connection 0
} [5 bytes data]
curl: (56) OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104

Я не уверен, что происходит.Я не могу найти много полезной информации относительно сообщения об ошибке.На моем Mac ошибочное значение равно 60 вместо 104.

Однако использование Chrome на этих машинах может загрузить страницу без каких-либо проблем.Версия CURL одной из машин - 7.58.0.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 17 декабря 2018

Проблема не в сертификате этого сайта.Из результатов отладки ясно видно, что подтверждение TLS выполнено успешно, и вне этого подтверждения сертификат не имеет значения.

Но, как можно видеть, сайт www.saiglobal.com защищен CDN Akamai CDN.а Akamai имеет определенное обнаружение ботов :

$ dig www.saiglobal.com
...
www.saiglobal.com.      45      IN      CNAME   www.saiglobal.com.edgekey.net.
www.saiglobal.com.edgekey.net. 62 IN    CNAME   e9158.a.akamaiedge.net.

Известно, что это обнаружение ботов использует некоторую эвристику, чтобы отличать ботов от обычных браузеров, и обнаружение бота может привести ккод состояния 403 доступ запрещен или просто зависание сайта - см. Попытки очистки при получении ошибки 403 или Запросы на тайм-аут соединения SSL .

В данном конкретном случае кажется,чтобы в настоящее время помочь, если добавлены некоторые конкретные заголовки HTTP, в частности Accept-Encoding, Accept-Language, Connection со значением keep-alive и User-Agent, которое как-то совпадает Mozilla.Невозможность добавить эти заголовки или неправильные значения приведет к зависанию.

В настоящее время у меня работает следующее:

$ curl -q -v \
   -H "Connection: keep-alive" \
   -H "Accept-Encoding: identity" \
   -H "Accept-Language: en-US" \
   -H "User-Agent: Mozilla/5.0"  \
   https://www.saiglobal.com/

Обратите внимание, что это намеренно пытается обойти обнаружение бота.Он может перестать работать, если Akamai внесет изменения в обнаружение бота.

Обратите внимание, что владелец сайта явно разрешил обнаружение ботов по какой-то причине.Это означает, что с намеренным обходом обнаружения для вашей собственной выгоды (например, предоставление некоторой услуги на основе извлеченной информации) вы можете столкнуться с юридическими проблемами.

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