Я пытаюсь использовать PHPCrawl (http://sourceforge.net/projects/phpcrawl/), чтобы тралить веб-сайт, переданный по HTTPS.PHPCrawl не создает SSL-сокет
я могу видеть, что есть поддержка SSL в классе PHPCrawlerHTTPRequest (метод openSocket):
// If ssl -> perform Server name indication
if ($this->url_parts["protocol"] == "https://")
{
$context = stream_context_create(array('ssl' => array('SNI_server_name' => $this->url_parts["host"])));
$this->socket = @stream_socket_client($protocol_prefix.$ip_address.":".$this->url_parts["port"], $error_code, $error_str,
$this->socketConnectTimeout, STREAM_CLIENT_CONNECT, $context);
}
Проблема не заключается в вызове stream_socket_client - хотя она возвращает нулевое error_code, и не error_str, это -> сокет по-прежнему является ложным.
В документации по методу говорится следующее:
Если возвращенное значение в егто равно 0 и функция возвращается FALSE, то это является показателем того, что произошла ошибка до подключения() вызова.
(см http://php.net/manual/en/function.stream-socket-client.php)
Так что я пытался использовать пример, приведенный в разделе комментариев, чтобы изменить контекст потока, используя «stream_context_set_option», чтобы установить verify_host и verify_peer ложь - ни один из которых, кажется, имеют какой-либо эффект.
Я не очень опытный в PHP или тонкостях веб - Кто-нибудь знает как:
- В каком состоянии (в частности) может вызвать этот вызов на провал? OR
- Обходной путь для решения проблемы?
Следует отметить, что я использую Facebook (HTTPS) в качестве тестового сервера.
не нужно отбрасывать версию PHP. См. [Эту ссылку] (https://sourceforge.net/p/phpcrawl/bugs/86/) для нескольких решений. Альтернативно просто перезапишите PHPCrawlerHTTPRequest.class.php с кодом, найденным здесь - https://github.com/merzilla/phpcrawl/blob/fix-php56-ssl-problem/libs/PHPCrawlerHTTPRequest.class.php#L537 – Ben