На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Передача данных на сервер методом POST через https , используя WinInet
      Товарищи, подскажите плиз, как передать серваку по https данные используя POST?

      Написал так (это код-отрывок для логина на сервере MSN):

      ExpandedWrap disabled
            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() - но заработать так и не заставил.

      Нашел то что мне нужно на Питоне, там оно смотрелось так:

      ExpandedWrap disabled
        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 и есть мой буффер.

      Подскажите, плиз, как это все сделать на Сях?
      Сообщение отредактировано: LivelyRoger -
        Господа, неужели никто не работал с WinInet.... странно....
          ну что то вроде этого
          ExpandedWrap disabled
            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&param2=%s&param3=%s"), strP1, strP2, strP3);
            inetfile->SendRequest(strHeader, (LPVOID)strValues.GetString(), strValues.GetLength());
            Nahel
            1. Что должно быть в strRequest? Мой buffer? И какой тип этой переменной?
            2. Format(_T("param1=%s&param2=%s&param3=%s"), strP1, strP2, strP3) - Я так понимаю что это любые дополнительные параметры?

            Вот пример корректного запроса:
            ExpandedWrap disabled
              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
            Что из этого куда толкать?

            ЗЫ пардон за ламерские вопросы, просто голова уже не работает....

            Добавлено
            ExpandedWrap disabled
              CHttpFile* inetfile = m_httpConnect->OpenRequest(CHttpConnection::HTTP_VERB_POST, buffer);

            В таком виде прога на этом месте вылетает
            (buffer содержит XMLные данные для отправки на сервак)
            Сообщение отредактировано: LivelyRoger -
              Цитата LivelyRoger @
              1. Что должно быть в strRequest? Мой buffer? И какой тип этой переменной?

              Тут находится непосредственно тот запрос который ты отправляешь т.е. к примеру открой html код и найди
              ExpandedWrap disabled
                form name=

              далее его имя, а вот вот затем само действие
              ExpandedWrap disabled
                action="myaction.php?"

              т.е.
              ExpandedWrap disabled
                strRequest = _T("myaction.php?");
              Цитата LivelyRoger @
              2. Format(_T("param1=%s&param2=%s&param3=%s"), strP1, strP2, strP3) - Я так понимаю что это любые дополнительные параметры?

              тут перечисяются те параметры которые ты дожен заполнить, они идут сразу после тега <form name>
              что то вроде этого
              ExpandedWrap disabled
                <input type='hidden' name='param1' value='1111'>
                Но ведь это все актуально для метода GET...
                Я так понимаю что в ПОСТ не указываются тип и имя передаваемой переменной.
                Я и не знаю этих данных. Например, в приведенном мною примере на Питоне, просто передаются данные. Ни имя, ни тип переменной не указывался.
                Или я все перепутал?
                  вся разница между пост и гет это
                  гет - передает все параметры открыто непосредственно в урл
                  пост - передает параметры в теле запроса
                  Лутше сначало почитать доку про HTTP протокол там все изложено когда и как и заем)

                  Добавлено
                  Цитата Nahel @
                  Я и не знаю этих данных

                  открой html код страницы и найди те данные которые тебе надо передать)
                  либо поставь снифер и погляди какие пакеты шлются
                    Nahel
                    Спасибо, буду дальше разбираться.
                      Насколько я понял, если происходит авторизация, сервер возвращает ID сессии, а как в таком случае получить этот ID и как его использовать? Спасибо
                        Может кому будет полезно:

                        У меня не проходила авторизация на сайте, какой бы пример я не пробовал, потому что в пароле был символ '['. Понял в чем причина только после того, как сравнил результаты браузера и программы в сниффере. Такой символ в частности заменяется на %B5.
                          Я вот не понимаю, как это снифером вы sll пакеты смотрели?
                            Mele
                            Пользовался IP Tools. Должны были возникнуть какие-то проблемы?
                              Цитата Russel @
                              Пользовался IP Tools. Должны были возникнуть какие-то проблемы?

                              Когда я пробовал смотреть через wireshark, там ни чего внятного не увидел. Ну оно и понятно, оно же зашифрованно(да, ко :) )
                              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0433 ]   [ 15 queries used ]   [ Generated: 19.05.24, 05:21 GMT ]