Задача:
1. Зайти на
https://example/ при помощи логина и пароля
2. Сграбить данные
Решение:
Название файла: parser.php
Кодировка файла: UTF-8
Содержимое файла:
// ШАГ 1
/*********************************************************
* ЗАЛОГИНИЛИСЬ И ПОЛУЧИЛИ ОТВЕТ ОТ QueryProcess : LOGIN
********************************************************/
$ch = curl_init();
$LOGIN = 'ЗАКРЫТО ИБО ОЧЕНЬ КОНФЕДЕНЦИАЛЬНО';
$PASSWD = 'ЗАКРЫТО ИБО ОЧЕНЬ КОНФЕДЕНЦИАЛЬНО';
$USER = 'ЗАКРЫТО ИБО ОЧЕНЬ КОНФЕДЕНЦИАЛЬНО';
$curl_data = "qid=CHECKACCOUNT&login_id=$LOGIN&password=$PASSWD&user_id=$USER&lang=1";
$options = array(
CURLOPT_URL => 'https://СЕРВЛЕТ ДЛЯ ОБРАБОТКИ ЗАПРОСОВ', // тоже закрыт. тоже конфеденциально
CURLOPT_RETURNTRANSFER => true, // DONT OUTPUT INTO BROWSER
CURLOPT_HEADER => false, // DONT RETURN HEADERS
CURLOPT_FOLLOWLOCATION => true, // FOLLOWING REDIRECTS
CURLOPT_ENCODING => "", // ALL ENCODINGS
CURLOPT_USERAGENT => "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)", // I AM MOZILLKO 4.0
CURLOPT_AUTOREFERER => true, // REFERER ON REDIRECTS
CURLOPT_CONNECTTIMEOUT => 120, // TIMEOUT FOR CONNECTION
CURLOPT_TIMEOUT => 120, // RESPONSE TIMEOUT
CURLOPT_MAXREDIRS => 10, // MAX REDIRECTS 10
CURLOPT_POST => 1, // IM SENDING POST DATA
CURLOPT_REFERER => 'http://ВАЛИЖНЫЙ РЕФЕРЕР',
CURLOPT_POSTFIELDS => $curl_data, // POST DATA STRING
CURLOPT_SSL_VERIFYHOST => 0, // DONT VERIFY SSL HOST
CURLOPT_SSL_VERIFYPEER => false, // DONT VERIFY SSL PEER
CURLOPT_VERBOSE => 1, //
CURLOPT_HTTPHEADER => array('Content-Type: application/x-www-form-urlencoded')
);
curl_setopt_array($ch, $options);
$res = curl_exec($ch); // То, что отдает нам сервлет
$info = curl_getinfo($ch); // информация (сколько длился запрос, какой http код отдал сервлет и т.д.)
if (curl_errno($ch)>0)
print curl_error($ch); // ВЫВОДИМ ОШИБКУ, ЕСЛИ ЕСТь
curl_close($ch);
$res = trim($res);
SSL версия 3 (сервер)
Дело в том, что у меня это работает прекрасно на моем виртуальном хосте и данные прилетают.
phpinfo мой:
PHP Version 5.2.4
cURL support enabled
cURL Information libcurl/7.16.0 OpenSSL/0.9.8d zlib/1.2.3
После переноса на хостинг получил ошибку
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
Закинул этот же скрипт еще на один хостинг. Получил ту же ошибку.
phpinfo хостинг 1:
PHP Version 5.2.8
cURL support enabled
cURL Information libcurl/7.19.2 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
phpinfo хостинг 2: (то же самое, что и на первом как оказалось)
PHP Version 5.2.8
cURL support enabled
cURL Information libcurl/7.19.2 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
6 часов (а может больше) "гуглинга" интернета не дали ровно ничего. Сертификат по всей видимости не требуется, т.к. на локалке у меня все работает, но я все таки пытался подсунуть "какой то" (я в этом плане не очень хорошо разбираюсь — информацию по SLL/OpenSSL читал, но глубинных знаний нет). Пытался указывать CURLOPT_COOKIEJAR, Пытался указывать CURLOPT_SSLAUTH, убирать автореферрер, указывать другой юзер-агент/не указывать юзер-агент... в общем, всего описать сейчас не смогу, но буквально уже выбился из сил. Не дает покоя то, что на локалке работает всё замечательно.
На локалке: Windows XP SP2, Denwer (Apache)
На хостингах: Unix, Apache
При том почти любой сайт (даже тот, который требует сертификат) удавалось считать как на локалке, так и на хостинге.
Кто сталкивался? Возможные пути решения? В чем (может быть) проблема?... Буду благодарен откликнувшимся.
Здравствуйте, Константин, Вы писали:
К>Здравствуйте, F1aSh, Вы писали:
FS>>error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
FS>>6 часов (а может больше) "гуглинга" интернета не дали ровно ничего.
К>гугли "CURL" + текст ошибки, уже среди первых ссылок есть полезные
Тыкните меня пожалуйста носом, как котенка, — в упор не вижу. Всего 5 ссылок (не считая ссылки на эту тему форума) и ничего полезного по этим ссылкам. По одной из ссылок скачал Hack Notes Web Security Portable Reference — сейчас начал изучать/читать, а проблему нужно решить до пятницы

Завтра поставлю наверное на второй комп OpenSUSE 10.3 — проверю как на линуксе работает, хотя что-то мне не особо верится, что это из-за системы как-то зависит.
Выдрал при помощи FireBug'a (плагин Mozilla FF) сертификат — пытался впихнуть — ноль эмоций, — та же ошибка, а на винде так вообще какие-то ругательства в сторону сертификата. Если указываю в опциях CURL SSL_VERIFYPEER 0, VERIFYHOST 0 — снова работает (но это, опять же, у меня работает, а не на хостинге). Файл куки проверял после исполнения скрипта... Если указываю какой-то другой https-адрес — там чего-то генерится... в моём случае такое ощущение, что связь с сервлетом прекращается почти сразу после запроса:
[namelookup_time] => 4.4E-5
[connect_time] => 0.296929
тому подтверждение. То есть попытка законнектиться -> handshake failure
инфу надо дергать с японских автомобильных аукционов. На них всё устроено так, что при определенной операции (например при запросе аукциона) данные передаются в сервлет асинхронно, а далее всё это дело парсится... По сути я уже во всем разобрался, т.е. на локалке я парсю все аукционы нормально... Мне бы вот только эту траблу решить и всё будет просто чудесно. Если не сложно, тыкните, плиз, носом, да пожесче, чтоб я прозрел
Конкретно с такой проблемой не сталкивался, хотя задача знакома. Поэтому могу только дать общие советы
Во-первых, создается ощущение, что CURL запрос сразу оформлялся с таким количеством настроек. Если это так, то попробуй упростить задачу, задав минимум опций(url, header, post, postfields, returntransfer), а затем увеличивай, пока не перестанет работать.
Хотя думаю, проблема все же с SSL.
Попробуй обратиться к сервлету напрямую, без CURL, но c использованием SSL.
От системы действительно, вряд ли что-то зависит, скорее, от настроек апача, php и ssl, попробуй их повторить на хостинге. Или же, наоборот, повторить настройки хостинга на какой-то виртуалке.
Еще раз внимательно почитай
http://ru2.php.net/manual/ru/book.curl.php Потом все комменты. Потом все комменты к каждой curl-функции на предмет проблем с ssl
Ну и ссылки, может уже видел, а может и помогут
http://ca.grid.kiae.ru/RDIG/info/faq.html
http://curl.haxx.se/mail/lib-2009-03/0325.html
http://bugs.gentoo.org/198914
http://www.mail-archive.com/openssl-users@openssl.org/msg47543.html
http://www.paypaldeveloper.com/pdn/board/message?board.id=nvp&thread.id=946
http://forums11.itrc.hp.com/service/forums/questionanswer.do?threadId=1229925
http://bugs.php.net/bug.php?id=33192&edit=2
http://www.nabble.com/ssl-handshake-failure-td13932843.html