Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.108.171] |
|
Сообщ.
#1
,
|
|
|
Товарищи, подскажите плиз, как передать серваку по https данные используя POST?
Написал так (это код-отрывок для логина на сервере MSN): CInternetSession session; CHttpConnection* pConnection = NULL; pConnection=session.GetHttpConnection("login.live.com", INTERNET_FLAG_SECURE, INTERNET_DEFAULT_HTTPS_PORT); CHttpFile* File = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, "RST.srf", NULL, 1, NULL, NULL, INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | INTERNET_FLAG_IGNORE_CERT_CN_INVALID ); Теперь, у меня есть переменная с данными для отправки, назовем ее Buf(там длинная строка), как мне ее правильно им отдать? Поигрался с CHttpFile.SendRequest() - но заработать так и не заставил. Нашел то что мне нужно на Питоне, там оно смотрелось так: SSO = HTTPSConnection( "login.live.com" ) // создание подключения SSO.connect() // соединяемся SSO.request( "POST", "https://login.live.com/RST.srf", SSOEnvelope ) // шлем запрос!!! То что мне и нужно response = SSO.getresponse() // Создаем канал ответа SSO_data = response.read() // Читаем ответ SSO.close() Здесь, SSOEnvelope и есть мой буффер. Подскажите, плиз, как это все сделать на Сях? |
Сообщ.
#2
,
|
|
|
Господа, неужели никто не работал с WinInet.... странно....
|
Сообщ.
#3
,
|
|
|
ну что то вроде этого
CHttpFile* inetfile = m_httpConnect->OpenRequest(CHttpConnection::HTTP_VERB_POST, strRequest); strHeader.Format(_T("POST http://%s%s HTTP/1.0\nAccept: */* \nContent-Type: application/x-www-form-urlencoded\nAccept-Encoding: gzip, deflate\nUser-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)\n Host: %s\n"),strServer, strRequest, strServer); strValues.Format(_T("param1=%s¶m2=%s¶m3=%s"), strP1, strP2, strP3); inetfile->SendRequest(strHeader, (LPVOID)strValues.GetString(), strValues.GetLength()); |
Сообщ.
#4
,
|
|
|
Nahel
1. Что должно быть в strRequest? Мой buffer? И какой тип этой переменной? 2. Format(_T("param1=%s¶m2=%s¶m3=%s"), strP1, strP2, strP3) - Я так понимаю что это любые дополнительные параметры? Вот пример корректного запроса: POST /RST.srf HTTP/1.0 Content-Length: 2558 Proxy-Connection: Keep-Alive Connection: Keep-Alive Accept: text/* User-Agent: gnet/0.1 (Linux i686) Host: login.live.com:443 Cache-Control: no-cache Content-Type: text/xml; charset=utf-8 <?xml version="1.0" encoding="utf-8"?><ns0:Envelope>........</ns0:Envelope> <?xml version="1.0" encoding="utf-8"?><ns0:Envelope>........</ns0:Envelope> - это и есть содержимое моего buffer'a Что из этого куда толкать? ЗЫ пардон за ламерские вопросы, просто голова уже не работает.... Добавлено CHttpFile* inetfile = m_httpConnect->OpenRequest(CHttpConnection::HTTP_VERB_POST, buffer); В таком виде прога на этом месте вылетает (buffer содержит XMLные данные для отправки на сервак) |
Сообщ.
#5
,
|
|
|
Цитата LivelyRoger @ 1. Что должно быть в strRequest? Мой buffer? И какой тип этой переменной? Тут находится непосредственно тот запрос который ты отправляешь т.е. к примеру открой html код и найди form name= далее его имя, а вот вот затем само действие action="myaction.php?" т.е. strRequest = _T("myaction.php?"); Цитата LivelyRoger @ 2. Format(_T("param1=%s¶m2=%s¶m3=%s"), strP1, strP2, strP3) - Я так понимаю что это любые дополнительные параметры? тут перечисяются те параметры которые ты дожен заполнить, они идут сразу после тега <form name> что то вроде этого <input type='hidden' name='param1' value='1111'> |
Сообщ.
#6
,
|
|
|
Но ведь это все актуально для метода GET...
Я так понимаю что в ПОСТ не указываются тип и имя передаваемой переменной. Я и не знаю этих данных. Например, в приведенном мною примере на Питоне, просто передаются данные. Ни имя, ни тип переменной не указывался. Или я все перепутал? |
Сообщ.
#7
,
|
|
|
вся разница между пост и гет это
гет - передает все параметры открыто непосредственно в урл пост - передает параметры в теле запроса Лутше сначало почитать доку про HTTP протокол там все изложено когда и как и заем) Добавлено Цитата Nahel @ Я и не знаю этих данных открой html код страницы и найди те данные которые тебе надо передать) либо поставь снифер и погляди какие пакеты шлются |
Сообщ.
#8
,
|
|
|
Nahel
Спасибо, буду дальше разбираться. |
Сообщ.
#9
,
|
|
|
Насколько я понял, если происходит авторизация, сервер возвращает ID сессии, а как в таком случае получить этот ID и как его использовать? Спасибо
|
Сообщ.
#10
,
|
|
|
Может кому будет полезно:
У меня не проходила авторизация на сайте, какой бы пример я не пробовал, потому что в пароле был символ '['. Понял в чем причина только после того, как сравнил результаты браузера и программы в сниффере. Такой символ в частности заменяется на %B5. |
Сообщ.
#11
,
|
|
|
Я вот не понимаю, как это снифером вы sll пакеты смотрели?
|
Сообщ.
#12
,
|
|
|
Mele
Пользовался IP Tools. Должны были возникнуть какие-то проблемы? |
Сообщ.
#13
,
|
|
|
Цитата Russel @ Пользовался IP Tools. Должны были возникнуть какие-то проблемы? Когда я пробовал смотреть через wireshark, там ни чего внятного не увидел. Ну оно и понятно, оно же зашифрованно(да, ко ) |