Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > HttpOpenRequest


Автор: GSV 17.3.2006, 17:49
Всем добрый день!
Нужно сделать сделать POST запрос
средствами WinInet. Создаю следующую процедуру:
Код

procedure TForm1.Button1Click(Sender: TObject);
var     ResConnect,ResSession,ResOpenURL     :HINTERNET;
          FileRead                                                  :bool;
          DataBuff,ResHttpOpenReq                      :pointer;
          Size,Bytes,hOut                                      :dWord;
          Head                                                       :TStringList;
          Ansi                                                         :PAnsiChar;

begin
    Head:=TStringList.Create();
    Head.Add('Content-type: text/plain; charset=winows-1251');
    Head.Add('Content-length: 0');
    Head.Add('X-Eport-Auth: point=*****; card="*****-*****"; pin="*********"');
    ResConnect:=InternetOpen('TEST',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0); // GetLastError = 0
    If ResConnect <> NIL then
    begin
        ResSession:=InternetConnect(ResConnect,'dealer.e-port.ru',INTERNET_DEFAULT_HTTPS_PORT,nil,'HTTP/1.0',INTERNET_SERVICE_HTTP,0,0); 
      // GetLastError = 0

         if ResSession <> Nil then
        begin
                 Ansi:='text/* ';
                ResHttpOpenReq:=HttpOpenRequest(ResSession, 'POST','https://dealer.e-port.ru/cp/dir','HTTP/1.0','',@Ansi,INTERNET_FLAG_SECURE, 0);
     // GetLastError = 122
//есно следующее не выполняется
                 if not (HttpAddRequestHeaders(ResSession, PChar(Head), Length(PChar(Head)),
                                      HTTP_ADDREQ_FLAG_REPLACE or
                                      HTTP_ADDREQ_FLAG_ADD or
                                      HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA)) then begin ShowMessage('err');Exit;end;
                InternetCloseHandle(ResHttpOpenReq);
            InternetCloseHandle(ResSession);
        end
    InternetCloseHandle(ResConnect);
    end
    Head.Free;

end;





Что сдесь не так?
Соединение через по https

Автор: N1k 20.3.2006, 10:19
Цитата(GSV @ 17.3.2006, 17:49 Найти цитируемый пост)
Что сдесь не так?

Практически все...
При правильной реализации ошибку 122 можно игнорировать.

Цитата(GSV @ 17.3.2006, 17:49 Найти цитируемый пост)
ResHttpOpenReq:=HttpOpenRequest(ResSession, 'POST','https://dealer.e-port.ru/cp/dir','HTTP/1.0','',@Ansi,INTERNET_FLAG_SECURE, 0);

третий параметр lpszObjectName т.е. UrlPath.
Ну и самое главное, а куда ты добавляешь заголовки...
Наверно нужно
Код

HttpAddRequestHeaders(ResHttpOpenReq,...

... и как...
Код

...PChar(Head), Length(PChar(Head)),...

может нужно
Код

PChar(Head.text), Length(PChar(Head.text)),

Ну а в остальном все правильно.


Автор: GSV 20.3.2006, 16:10
Пример был взят с этого форума.
Правда соединение было по http.
Я только переставил на https.
Первая функция HttpOpenRequest, потом HttpAddRequestHeaders?



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)