Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Как эмулировать отправку данныех формы на www-сервер при помощи WinInet

div.main {margin-left: 20pt; margin-right: 20pt}

Как эмулировать отправку данныех формы на www-сервер при помощи WinInet


WWW.ИСХОДНИКИ.РУ


Для эмуляции отправки данных формы, необходимо отправить на сервер заголовок, содержащий правильный Content-Type. Для форм, заголовок Content-Type должен выглядеть следующим образом:

Content-Type: application/x-www-form-urlencoded

Во многих случаях, сервер может неправильно отреагировать, если в запросе не указан Content-Type. Например, компонент Active Server Pages вебсервера IIS 3.0 проверяет заголовок на наличие в нём 'application/x-www-form- urlencoded' перед тем, как добавить переменные формы в объект "Request.Form". Данный MIME/Content-Type указывает на то, что передаваемые данные это список URL-кодированных переменных формы. Под URL-кодированием понимается, что символы пробела (ASCII 32) будут закодированы как '+', а специальный символ, например, такой как '!' будет закодирован шестнадцатиричной форме как '%21'.

Вот кусок кода, использующего классы MFC WinInet для эмуляции запроса формы POST:

CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded"); // URL-кодированные переменные формы - // name = "John Doe", userid = "hithere", other = "P&Q" CString strFormData = _T("name=John+Doe&userid=hithere&other=P%26Q"); CInternetSession session; CHttpConnection* pConnection = session.GetHttpConnection(_T("ServerNameHere")); CHttpFile* pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, _T("FormActionHere")); BOOL result = pFile->SendRequest(strHeaders, (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());

Без MFC тот же код будет выглядет следующим образом:

static TCHAR hdrs[] = _T("Content-Type: application/x-www-form-urlencoded"); static TCHAR frmdata[] = _T("name=John+Doe&userid=hithere&other=P%26Q"); statuc TCHAR accept[] = _T("Accept: */*"); // для понятности, проверка ошибок была удалена HINTERNET hSession = InternetOpen("MyAgent", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); HINTERNET hConnect = InternetConnect(hSession, _T("ServerNameHere"), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1); HINTERNET hRequest = HttpOpenRequest(hConnect, "POST", _T("FormActionHere"), NULL, NULL, accept, 0, 1); HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata)); // закрываем internet-дескрипторы

 


За более подробной информацией URL-кодированию и формату запроса POST обращайтесь к секции 8.2 в RFC 1866.

Функции WinInet описаны здесь.



  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте