Странная вещь, сделал программу клиент для mail.ru по заказу клиента, программа логинется и проверяет есть ли новые письма, кто постучался в гости в друзья в моем мире и позвал в сообщества.
так вот программа у меня логинится нормально, еще на одном компе своем пробывал запускать тоже нормально, а у клиента не логинется... зашел к нему через тиам вьювер и настроил все и все равно ответ от сервера нулевой.
потом попытался просто google.ru и mail.ru загрузить, грузит отлично, потом обратил внимание что логинка на mail.ru идет через https://auth.mail.ru/cgi-bin/auth а тут соединение с сервером идет через ssl.
попробывал еще у нескольких людей запустить программу вышло из 10 попыток у 6 работает у 4х пользователей нет, просто не логинится и никакого ответа сервера не выдает...
request.setUrl(QUrl(load_url));
request.setRawHeader("User-Agent",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/20100722 MRA 5.6 (build 03402)
Firefox/3.6.8 (.NET CLR 3.5.30729) sputnik 2.0.1.41 WebMoney Advisor");
request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
request.setRawHeader("Accept-Language", "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3");
request.setRawHeader("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.7");
if(referer != "")
request.setRawHeader( "Referer", referer.toUtf8() );
if(cookie != "")
request.setRawHeader( "Cookie", cookie.toUtf8() );
if(proxy != "" && with_proxy)
{
ip_port = proxy.split(":");
if( ip_port.length() == 2 )
{
tmp = ip_port[1];
port = tmp.toInt();
if( http_socks5 )
manager.setProxy(QNetworkProxy(QNetworkProxy::HttpProxy, ip_port[0], port));
else
manager.setProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, ip_port[0], port));
}
}
if(post_data == "")
reply = manager.get( request );
else
reply = manager.post( request, post_data );
QObject::connect( reply, SIGNAL( finished() ), &loop, SLOT( quit() ) );
QObject::connect( &timer, SIGNAL( timeout() ), &loop, SLOT( quit() ) );
QObject::connect( reply, SIGNAL(sslErrors(QList<QSslError>)), reply, SLOT(ignoreSslErrors()));
timer.start(30000);
loop.exec();
cookie_loaded = reply->rawHeader("Set-Cookie");
location = reply->rawHeader("Location");
QByteArray buf = reply->readAll();
headers = reply->rawHeaderList();
по-моему для работы с SSL надо OpenSSL вкомпиливать в кутэ
у меня openSSL установлен на компе, я клиенту тоже устанавливал openSSL на комп и не дало результата... я думаю тоже что в кьюти нужно кампилировать но не знаю как и какие либы... наверное libssl32.dll libssl.dll но как это сделать не знаю...
вот нашел кое что
Из папки c OpenSSL \lib нужно скопировать файлы: libeay32.lib ssleay32.lib
в папку Qt qt\lib
Из папки с OpenSSL \lib\MinGW скопировать все файлы в папку Qt \mingw\lib
Из папки c OPenSSL \include скопировать папку openssl со всем содержимым в папку Qt \qt\include
Запустить "Qt Command Prompt" (C:\WINDOWS\system32\cmd.exe /K C:\Qt\2009.02\bin\qtenv.bat) и вписать в команду configure ключ -openssl-linked
только в CMD не получается запустить C:\WINDOWS\system32\cmd.exe /K F:\Qt\bin\qtenv.bat configure -openssl-linked
F:\Documents and Settings\Admin>F:\Qt\bin\qtenv.bat configure -openssl-linked
Setting up a MinGW/Qt only environment...
-- QTDIR set to F:\Qt\qt
-- PATH set to F:\Qt\qt\bin
-- Adding F:\Qt\bin to PATH
-- Adding F:\WINDOWS\System32 to PATH
-- QMAKESPEC set to win32-g++
вот такое вот получилось, я не понял добавил я ссл или нет... и нужно ли будет потом закидывать какие то библиотеки с ехе ... и про файле что нить дополнительно прописывать???
Разабрался... у меня в C:\WINDOWS\system32 лежат libeay32.lib и libssl32.lib поэтому и работает норм на моем компе, попробывал удалить эти дви дллки и все. соединение тут же пропало)) закинул к ехешнику и норм, в общем к программе теперь нужно будет подкинуть эти две дллки и все путем работает))
вопрос не закрыт, соединения у людей так и не появилось...
уже и добавил
QObject::connect( reply, SIGNAL(sslErrors(QList<QSslError>)), reply, SLOT(ignoreSslErrors()));
все методы из сети использованы... толи что то не то делаю...
ниужели никто не сталкивался с такой проблемой???
снимай снифером логи обмена пакетами. может, банально файрвол зарубает или ещё что. какой-нить брандмауэр или хостер.
ну и, как вариант, настройки почтовика у клиентов: иногда для доступа к почте по POP или IMAP на самом сервере надо галочки проставлять сначала, а так просто тупо не будет коннектиться.
я снифером и смотрел. Там сначала вводишь логин и пароль на странице mail.ru затем она перекидывает на https://auth.mail.ru/cgi-bin/auth и там уже пост запросом вводит эти данные чтобы залогиниться.
причем проблема не имено в https://auth.mail.ru/cgi-bin/auth а в любых сайтах где конект идет через SSL пробывал несколько сайтов грузить с https но та же ерунда, просто нулевой ответ.
проблему уже вдоль и попрек перебераю, уже почти неделю бьюсь и вообще толку ноль...
А посмотри на сигнал:
void QNetworkAccessManager::authenticationRequired ( QNetworkReply * reply, QAuthenticator * authenticator ) [signal]
eldar85,
напиши хоть как все решилось.
не решилось пока, не могу ничего нарыть...
этот сигнал
void QNetworkAccessManager::authenticationRequired ( QNetworkReply * reply, QAuthenticator * authenticator ) [signal]
void QNetworkAccessManager::authenticationRequired ( QNetworkReply * reply, QAuthenticator * authenticator ) [signal]
Со своим слотом, в котором и заполнять информацию для авторизации в объекте QAuthenticator, указатель на который передается в параметрах сигнала.
не думаю я что проблема в аутификации, у меня то на компе она работает, а у некоторых не работает, такое ощущение что имено библиотек каких то не хватает... потому что у себя если из system32 удаляю libssl.dll то прога тут же перестает соединять с сервером, а ставлю на место работает. клиенту все забросил, в дополнение еще и ехе файлу дллки подкинул, но вот чего то не хватает...
Ну я только предположил, может и не в ней.
вот это вот интересно как пишут троли
Из папки c OpenSSL \lib нужно скопировать файлы: libeay32.lib ssleay32.lib
в папку Qt qt\lib
Из папки с OpenSSL \lib\MinGW скопировать все файлы в папку Qt \mingw\lib
Из папки c OPenSSL \include скопировать папку openssl со всем содержимым в папку Qt \qt\include
Запустить "Qt Command Prompt" (C:\WINDOWS\system32\cmd.exe /K C:\Qt\2009.02\bin\qtenv.bat) и вписать в команду configure ключ -openssl-linked
только в CMD не получается запустить C:\WINDOWS\system32\cmd.exe /K F:\Qt\bin\qtenv.bat configure -openssl-linked
F:\Documents and Settings\Admin>F:\Qt\bin\qtenv.bat configure -openssl-linked
получил вот это, но разобраться в полученом не могу, это успешная конфигурация или нет:
Setting up a MinGW/Qt only environment...
-- QTDIR set to F:\Qt\qt
-- PATH set to F:\Qt\qt\bin
-- Adding F:\Qt\bin to PATH
-- Adding F:\WINDOWS\System32 to PATH
-- QMAKESPEC set to win32-g++
а может вот эта команда не верна F:\Documents and Settings\Admin>F:\Qt\bin\qtenv.bat configure -openssl-linked
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)