Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по пересылке данных с помощью wininet 
:(
    Опции темы
Bibigon
Дата 4.11.2008, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.2.2006

Репутация: нет
Всего: нет



Есть следующий пример кода JS, который хочу перевести на Delphi:

var xmlhttp = Server.CreateObject ("MSXML2.ServerXMLHTTP");

xmlhttp.setOption(3, 'option');

xmlhttp.open('POST', 'https://blabla.ru/page.asp', false); 
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
xmlhttp.send(data);

===========================================================
Дельфи :

var
  hOpen, hConnect, hRequest: hInternet;
begin
    

    hOpen := InternetOpen('test', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

    hConnect := InternetConnect(hOpen, pchar('blabla.ru'), 80 , '', '',INTERNET_SERVICE_HTTP, 0, 0);

    hRequest := HttpOpenRequest(hConnect, 'POST', pchar('page.asp'), HTTP_VERSION, '', nil, INTERNET_FLAG_SECURE, 0);

        HttpSendRequest(hRequest, 'Content-Type: application/x-www-form-urlencoded', 47,  PChar(data),  Length(data)) ;
....


Не могу понять как перевести xmlhttp.setOption(3, 'option'); 

Заранее спасибо. 
PM MAIL   Вверх
ecspertiza
  Дата 5.11.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: нет
Всего: 5



вопрос в том что тебе конкретно надо сделать, setOption насколько я понимаю, задает какието параметры, может тебе эта строка и вовсе не понадобится, да и тем более, переводить код это ужас, уже давно есть готовые примеры, тебе вроде отправка данных нужна.
Код

  function SendPOSTData(Const szHost, szPath, szData: PChar) : string;
  var
    hOpenHandle, hConnectHandle, hResourceHandle: Pointer;
    Buff  : array [0..1024] of Char;
    Cbyte : DWORD;
    i:integer;
    Error : DWORD;
    Flag, BuffLen : DWORD;
  Begin


    hOpenHandle:=InternetOpen('Export', PRE_CONFIG_INTERNET_ACCESS, nil, nil, 0);
    If hOpenHandle<>nil then
    Begin
      hConnectHandle:=InternetConnect(hOpenHandle, szHost, INTERNET_DEFAULT_HTTPS_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
      If hConnectHandle<>nil then
      Begin
        hResourceHandle:=HttpOpenRequest(hConnectHandle, 'POST', szPath, HTTP_VERSION, nil, nil,   INTERNET_FLAG_RELOAD or                                                   INTERNET_FLAG_SECURE or INTERNET_FLAG_IGNORE_CERT_CN_INVALID or INTERNET_FLAG_IGNORE_CERT_DATE_INVALID, 0);
        If hResourceHandle<>nil then
          Begin
              bufflen := SizeOf(Flag);
              InternetQueryOption (hResourceHandle, INTERNET_OPTION_SECURITY_FLAGS, @Flag, BuffLen);

              Flag := SECURITY_FLAG_IGNORE_UNKNOWN_CA;

              bufflen := SizeOf(Flag);

              InternetSetOption (hResourceHandle, INTERNET_OPTION_SECURITY_FLAGS,    @Flag, sizeof (Flag) );


              HttpSendRequest(hResourceHandle, 'Content-Type: application/x-www-form-urlencoded', 47, szData, lstrlen(szData));

              InternetReadFile(hResourceHandle, @Buff, Length(Buff), CByte);
                if (CByte <> 0) then
                for i:=0 to Length(Buff)-1 do
                  Result:= Result + Buff[i];
          End;
        InternetCloseHandle(hResourceHandle);
      End;
    InternetCloseHandle(hConnectHandle);
    End;
   InternetCloseHandle(hOpenHandle);
 

вот эту функцию я использовал для отправки файла по HTTPS тебе нада поменять INTERNET_DEFAULT_HTTPS_PORT на INTERNET_DEFAULT_HTTP_PORT с параметрами я думаю разберёшся


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
Bibigon
Дата 5.11.2008, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.2.2006

Репутация: нет
Всего: нет



xmlhttp.setOption(3, 'option'); 

Это поле связано с сертификатом для SSL. Что писать в нем для  Delphi я и пытаюсь понять.
PM MAIL   Вверх
ecspertiza
  Дата 6.11.2008, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: нет
Всего: 5



так тебе надо данные передать по SSL?
Насколько я знаю протокол SSL  передается по таму же порту что и Https, значит пример остается верным т.к. использовался для передачи по Https.

а сертификаты задаются вот в этой строке.

hResourceHandle:=HttpOpenRequest(hConnectHandle, 'POST', szPath, HTTP_VERSION, nil, nil,   INTERNET_FLAG_RELOAD or                                                   INTERNET_FLAG_SECURE or INTERNET_FLAG_IGNORE_CERT_CN_INVALID or INTERNET_FLAG_IGNORE_CERT_DATE_INVALID, 0);

конкретно:

NTERNET_FLAG_RELOAD or 
INTERNET_FLAG_SECURE or 
INTERNET_FLAG_IGNORE_CERT_CN_INVALID or 
INTERNET_FLAG_IGNORE_CERT_DATE_INVALID

а поточнее узнать тебе поможет google, там про WinInet, до фига всего правда примеры в основном на C++.

Добавлено через 5 минут и 10 секунд
INTERNET_FLAG_CACHE_IF_NET_FAIL    Получает ресурс из кэша, если он недоступен в Internet.
INTERNET_FLAG_KEEP_CONNECTION    Флаг сохранения настроек авторизации на протяжении подключения.
INTERNET_FLAG_NEED_FILE    Кэширует файл или создаёт временный файл для получаемого ресурса.
INTERNET_FLAG_PRAGMA_NOCACHE    Считывает данные с нужного сервера, минуя кэш прокси-сервера.
INTERNET_FLAG_RELOAD    Считывает данные с сервера, а не из кэша системы.

вот описание некоторых флагов.


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1059 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.