| 
Вопрос # 1 721/ вопрос открыт /  | 
 
 | 
 
 
Приветствую, уважаемые эксперты! 
Подскажите как сделать Get/Post запрос на URL-адрес и получить ответ. спасибо 
  | 
 
Вопрос задал: HotMan (статус: Посетитель) 
Вопрос отправлен: 23 июня 2008, 20:52 
Состояние вопроса: открыт, ответов: 2. 
 |  
 
Ответ #1. Отвечает эксперт: Вадим К 
Здравствуйте, HotMan! 
И почему не почитать старые вопросы в этой теме, там точно есть ответы на этот вопрос. всё ведь предельно просто, если например юзать Indy компонент. 
Get запрос 
s:= idHTTP.Get('http://www.delphi.int.ru'); - и в строковой переменной у вас хтмл текст страницы 
Post запрос 
sl:TStringList; 
sl := TStringList.create; 
sl.add('param1=value1'); 
sl.add('param2=value2'); 
s := idHTTP1.post('http://ввв.сайт.нет',sl); 
sl.free; 
 
вот только проблема есть, если хочеться использовать ssl. Тут инди немного не дружит. Но для этого подпишитесь на рассылку от сайта - в ближайшей будет моя статья об использовании компонентов Synapse для этой цели. 
Также неплохо будет почитать уже и други мои статьи на этом сайте 
Скачиваем файлы из интернета 
Читаем цитаты с bash.org.ru своей программой 
  | 
 Ответ отправил: Вадим К (статус: Академик) 
Время отправки: 24 июня 2008, 09:59
 Оценка за ответ: 4 
 |  
 
Ответ #2. Отвечает эксперт: Feniks 
Здравствуйте, HotMan! 
Держите в Приложении примеры : 
1. Пример HTTP Get - загружаем файлы и страницы из Интернета. 
2. Как заполнить форму и отправить на сервер. 
 
Желаю удачи. 
Приложение: Переключить в обычный режим-  
 
- {*************************************************************}
 
- {            HTTPGet component for Delphi 32                  }
 
- { Version:   1.94                                             }
 
- { E-Mail:    info@utilmind.com                                }
 
- { WWW:       http://www.utilmind.com                          }
 
- { Created:   October  19, 1999                                }
 
- { Modified:  June 6, 2000                                     }
 
- { Legal:     Copyright (c) 1999-2000, UtilMind Solutions      }
 
- {*************************************************************}
 
- { PROPERTIES:                                                 }
 
- {   Agent: String - User Agent                                }
 
- {                                                             }
 
- {*  BinaryData: Boolean - This setting specifies which type   }
 
- {*                        of data will taken from the web.    }
 
- {*                        If you set this property TRUE then  }
 
- {*                        component will determinee the size  }
 
- {*                        of files *before* getting them from }
 
- {*                        the web.                            }
 
- {*                        If this property is FALSE then as we}
 
- {*                        do not knows the file size the      }
 
- {*                        OnProgress event will doesn't work. }
 
- {*                        Also please remember that is you set}
 
- {*                        this property as TRUE you will not  }
 
- {*                        capable to get from the web ASCII   }
 
- {*                        data and ofter got OnError event.   }
 
- {                                                             }
 
- {   FileName: String - Path to local file to store the data   }
 
- {                      taken from the web                     }
 
- {   Password, UserName - set this properties if you trying to }
 
- {                        get data from password protected     }
 
- {                        directories.                         }
 
- {   Referer: String - Additional data about referer document  }
 
- {   URL: String - The url to file or document                 }
 
- {   UseCache: Boolean - Get file from the Internet Explorer's }
 
- {                       cache if requested file is cached.    }
 
- {*************************************************************}
 
- { METHODS:                                                    }
 
- {   GetFile - Get the file from the web specified in the URL  }
 
- {             property and store it to the file specified in  }
 
- {             the FileName property                           }
 
- {   GetString - Get the data from web and return it as usual  }
 
- {               String. You can receive this string hooking   }
 
- {               the OnDoneString event.                       }
 
- {   Abort - Stop the current session                          }
 
- {*************************************************************}
 
- { EVENTS:                                                     }
 
- {   OnDoneFile - Occurs when the file is downloaded           }
 
- {   OnDoneString - Occurs when the string is received         }
 
- {   OnError - Occurs when error happend                       }
 
- {   OnProgress - Occurs at the receiving of the BINARY DATA   }
 
- {*************************************************************}
 
-  
 
- unit HTTPGet;
 
-  
 
- interface
 
-  
 
- uses
 
- Windows, Messages, SysUtils, Classes, WinInet;
 
-  
 
- type
 
- TOnProgressEvent = procedure(Sender: TObject; TotalSize, Readed: Integer) of object;
 
- TOnDoneFileEvent = procedure(Sender: TObject; FileName: String; FileSize: Integer) of object;
 
- TOnDoneStringEvent = procedure(Sender: TObject; Result: String) of object;
 
-  
 
- THTTPGetThread = class(TThread)
 
- private
 
-    FTAcceptTypes,
 
-    FTAgent,
 
-    FTURL,
 
-    FTFileName,
 
-    FTStringResult,
 
-    FTUserName,
 
-    FTPassword,
 
-    FTPostQuery,
 
-    FTReferer: String;
 
-    FTBinaryData,
 
-    FTUseCache: Boolean;
 
-  
 
-    FTResult: Boolean;
 
-    FTFileSize: Integer;
 
-    FTToFile: Boolean;
 
-  
 
-    BytesToRead, BytesReaded: DWord;
 
-  
 
-    FTProgress: TOnProgressEvent;
 
-  
 
-    procedure UpdateProgress;
 
- protected
 
-    procedure Execute; override;
 
- public
 
-    constructor Create(aAcceptTypes, aAgent, aURL, aFileName, aUserName, aPassword, 
 
-      aPostQuery, aReferer: String; aBinaryData, aUseCache: 
 
-      Boolean; aProgress: TOnProgressEvent; aToFile: Boolean);
 
- end;
 
-  
 
- THTTPGet = class(TComponent)
 
- private
 
-    FAcceptTypes: String;
 
-    FAgent: String;
 
-    FBinaryData: Boolean;
 
-    FURL: String;
 
-    FUseCache: Boolean;
 
-    FFileName: String;
 
-    FUserName: String;
 
-    FPassword: String;
 
-    FPostQuery: String;
 
-    FReferer: String;
 
-    FWaitThread: Boolean;
 
-  
 
-    FThread: THTTPGetThread;
 
-    FError: TNotifyEvent;
 
-    FResult: Boolean;
 
-  
 
-    FProgress: TOnProgressEvent;
 
-    FDoneFile: TOnDoneFileEvent;
 
-    FDoneString: TOnDoneStringEvent;
 
-  
 
-    procedure ThreadDone(Sender: TObject);
 
- public
 
-    constructor Create(aOwner: TComponent); override;
 
-    destructor Destroy; override;
 
-  
 
-    procedure GetFile;
 
-    procedure GetString;
 
-    procedure Abort;
 
- published
 
-    property AcceptTypes: String read FAcceptTypes write FAcceptTypes;
 
-    property Agent: String read FAgent write FAgent;
 
-    property BinaryData: Boolean read FBinaryData write FBinaryData;
 
-    property URL: String read FURL write FURL;
 
-    property UseCache: Boolean read FUseCache write FUseCache;
 
-    property FileName: String read FFileName write FFileName;
 
-    property UserName: String read FUserName write FUserName;
 
-    property Password: String read FPassword write FPassword;
 
-    property PostQuery: String read FPostQuery write FPostQuery;
 
-    property Referer: String read FReferer write FReferer;
 
-    property WaitThread: Boolean read FWaitThread write FWaitThread;
 
-  
 
-    property OnProgress: TOnProgressEvent read FProgress write FProgress;
 
-    property OnDoneFile: TOnDoneFileEvent read FDoneFile write FDoneFile;
 
-    property OnDoneString: TOnDoneStringEvent read FDoneString write FDoneString;
 
-    property OnError: TNotifyEvent read FError write FError;
 
- end;
 
-  
 
- procedure Register;
 
-  
 
- implementation
 
-  
 
- //  THTTPGetThread
 
-  
 
- constructor THTTPGetThread.Create(aAcceptTypes, aAgent, aURL, aFileName, aUserName, 
 
- aPassword, aPostQuery, aReferer: String; aBinaryData, aUseCache: 
 
- Boolean; aProgress: TOnProgressEvent; aToFile: Boolean);
 
- begin
 
- FreeOnTerminate := True;
 
- inherited Create(True);
 
-  
 
- FTAcceptTypes := aAcceptTypes;
 
- FTAgent := aAgent;
 
- FTURL := aURL;
 
- FTFileName := aFileName;
 
- FTUserName := aUserName;
 
- FTPassword := aPassword;
 
- FTPostQuery := aPostQuery;
 
- FTReferer := aReferer;
 
- FTProgress := aProgress;
 
- FTBinaryData := aBinaryData;
 
- FTUseCache := aUseCache;
 
-  
 
- FTToFile := aToFile;
 
- Resume;
 
- end;
 
-  
 
- procedure THTTPGetThread.UpdateProgress;
 
- begin
 
- FTProgress(Self, FTFileSize, BytesReaded);
 
- end;
 
-  
 
- procedure THTTPGetThread.Execute;
 
- var
 
- hSession, hConnect, hRequest: hInternet;
 
- HostName, FileName: String;
 
- f: File;
 
- Buf: Pointer;
 
- dwBufLen, dwIndex: DWord;
 
- Data: Array[0..$400] of Char;
 
- TempStr: String;
 
- RequestMethod: PChar;
 
- InternetFlag: DWord;
 
- AcceptType: LPStr;
 
-  
 
- procedure ParseURL(URL: String; var HostName, FileName: String);
 
-  
 
-    procedure ReplaceChar(c1, c2: Char; var St: String);
 
-    var
 
-      p: Integer;
 
-    begin
 
-      while True do
 
-       begin
 
-        p := Pos(c1, St);
 
-        if p = 0 then Break
 
-        else St[p] := c2;
 
-       end;
 
-    end;
 
-  
 
- var
 
-    i: Integer;
 
- begin
 
-    if Pos('http://', LowerCase(URL)) <> 0 then
 
-      System.Delete(URL, 1, 7);
 
-  
 
-    i := Pos('/', URL);
 
-    HostName := Copy(URL, 1, i);
 
-    FileName := Copy(URL, i, Length(URL) - i + 1);
 
-  
 
-    if (Length(HostName) > 0) and (HostName[Length(HostName)] = '/') then
 
-      SetLength(HostName, Length(HostName) - 1);
 
- end;
 
-  
 
- procedure CloseHandles;
 
- begin
 
-   InternetCloseHandle(hRequest);
 
-   InternetCloseHandle(hConnect);
 
-   InternetCloseHandle(hSession);
 
- end;
 
-  
 
- begin
 
- try
 
-    ParseURL(FTURL, HostName, FileName);
 
-  
 
-    if Terminated then
 
-     begin
 
-      FTResult := False;
 
-      Exit;
 
-     end;
 
-  
 
-    if FTAgent <> '' then
 
-     hSession := InternetOpen(PChar(FTAgent),
 
-       INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0)
 
-    else
 
-     hSession := InternetOpen(nil,
 
-       INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
 
-  
 
-    hConnect := InternetConnect(hSession, PChar(HostName),
 
-      INTERNET_DEFAULT_HTTP_PORT, PChar(FTUserName), PChar(FTPassword), INTERNET_SERVICE_HTTP, 0, 0);
 
-  
 
-    if FTPostQuery = '' then RequestMethod := 'GET'
 
-    else RequestMethod := 'POST';
 
-  
 
-    if FTUseCache then InternetFlag := 0
 
-    else InternetFlag := INTERNET_FLAG_RELOAD;
 
-  
 
-    AcceptType := PChar('Accept: ' + FTAcceptTypes);
 
-    hRequest := HttpOpenRequest(hConnect, RequestMethod, PChar(FileName), 'HTTP/1.0',
 
-                PChar(FTReferer), @AcceptType, InternetFlag, 0);
 
-  
 
-    if FTPostQuery = '' then
 
-     HttpSendRequest(hRequest, nil, 0, nil, 0)
 
-    else
 
-     HttpSendRequest(hRequest, 'Content-Type: application/x-www-form-urlencoded', 47,
 
-                     PChar(FTPostQuery), Length(FTPostQuery));
 
-  
 
-    if Terminated then
 
-     begin
 
-      CloseHandles;
 
-      FTResult := False;
 
-      Exit;
 
-     end;
 
-  
 
-    dwIndex  := 0;
 
-    dwBufLen := 1024;
 
-    GetMem(Buf, dwBufLen);
 
-  
 
-    FTResult := HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_LENGTH,
 
-                              Buf, dwBufLen, dwIndex);
 
-  
 
-    if Terminated then
 
-     begin
 
-      FreeMem(Buf);
 
-      CloseHandles;
 
-      FTResult := False;
 
-      Exit;
 
-     end;
 
-  
 
-    if FTResult or not FTBinaryData then
 
-     begin
 
-      if FTResult then
 
-        FTFileSize := StrToInt(StrPas(Buf));
 
-  
 
-      BytesReaded := 0;
 
-  
 
-      if FTToFile then
 
-       begin
 
-        AssignFile(f, FTFileName);
 
-        Rewrite(f, 1);
 
-       end
 
-      else FTStringResult := '';
 
-  
 
-      while True do
 
-       begin
 
-        if Terminated then
 
-         begin
 
-          if FTToFile then CloseFile(f);
 
-          FreeMem(Buf);
 
-          CloseHandles;
 
-  
 
-          FTResult := False;
 
-          Exit;
 
-         end;
 
-  
 
-        if not InternetReadFile(hRequest, @Data, SizeOf(Data), BytesToRead) then Break
 
-        else
 
-         if BytesToRead = 0 then Break
 
-         else
 
-          begin
 
-           if FTToFile then
 
-            BlockWrite(f, Data, BytesToRead)
 
-           else
 
-            begin
 
-             TempStr := Data;
 
-             SetLength(TempStr, BytesToRead);
 
-             FTStringResult := FTStringResult + TempStr;
 
-            end;
 
-  
 
-           inc(BytesReaded, BytesToRead);
 
-           if Assigned(FTProgress) then
 
-            Synchronize(UpdateProgress);
 
-          end;
 
-       end;
 
-  
 
-      if FTToFile then
 
-        FTResult := FTFileSize = Integer(BytesReaded)
 
-      else
 
-       begin
 
-        SetLength(FTStringResult, BytesReaded);
 
-        FTResult := BytesReaded <> 0;
 
-       end;
 
-  
 
-      if FTToFile then CloseFile(f);
 
-     end;
 
-  
 
-    FreeMem(Buf);
 
-  
 
-    CloseHandles;
 
- except
 
- end;
 
- end;
 
-  
 
- // HTTPGet
 
-  
 
- constructor THTTPGet.Create(aOwner: TComponent);
 
- begin
 
- inherited Create(aOwner);
 
- FAcceptTypes := '*/*';
 
- FAgent := 'UtilMind HTTPGet';
 
- end;
 
-  
 
- destructor THTTPGet.Destroy;
 
- begin
 
- Abort;
 
- inherited Destroy;
 
- end;
 
-  
 
- procedure THTTPGet.GetFile;
 
- var
 
- Msg: TMsg;
 
- begin
 
- if not Assigned(FThread) then
 
-   begin
 
-    FThread := THTTPGetThread.Create(FAcceptTypes, FAgent, FURL, FFileName, FUserName, 
 
-      FPassword, FPostQuery, FReferer, FBinaryData, FUseCache, FProgress, True);
 
-    FThread.OnTerminate := ThreadDone;
 
-    if FWaitThread then
 
-    while Assigned(FThread) do
 
-     while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
 
-      begin
 
-        TranslateMessage(Msg);
 
-        DispatchMessage(Msg);
 
-      end;
 
-   end
 
- end;
 
-  
 
- procedure THTTPGet.GetString;
 
- var
 
- Msg: TMsg;
 
- begin
 
- if not Assigned(FThread) then
 
-   begin
 
-    FThread := THTTPGetThread.Create(FAcceptTypes, FAgent, FURL, FFileName, FUserName, 
 
-      FPassword, FPostQuery, FReferer, FBinaryData, FUseCache, FProgress, False);
 
-    FThread.OnTerminate := ThreadDone;
 
-    if FWaitThread then
 
-     while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
 
-      begin
 
-        TranslateMessage(Msg);
 
-        DispatchMessage(Msg);
 
-      end;
 
-   end
 
- end;
 
-  
 
- procedure THTTPGet.Abort;
 
- begin
 
- if Assigned(FThread) then
 
-   begin
 
-    FThread.Terminate;
 
-    FThread.FTResult := False;
 
-   end;
 
- end;
 
-  
 
- procedure THTTPGet.ThreadDone(Sender: TObject);
 
- begin
 
- FResult := FThread.FTResult;
 
- if FResult then
 
-   if FThread.FTToFile then
 
-    if Assigned(FDoneFile) then FDoneFile(Self, FThread.FTFileName, FThread.FTFileSize) else
 
-   else
 
-    if Assigned(FDoneString) then FDoneString(Self, FThread.FTStringResult) else
 
- else
 
-   if Assigned(FError) then FError(Self);
 
- FThread := nil;
 
- end;
 
-  
 
- procedure Register;
 
- begin
 
- RegisterComponents('UtilMind', [THTTPGet]);
 
- end;
 
-  
 
- end.
 
-  
 
-  
 
-  
 
-  
 
-  
 
-  
 
- <form method=GET action=http://localhost/cgi-bin/mget?>
 
-  
 
-  
 
- <input type=submit>
 
- </form>
 
-  
 
-  
 
-  
 
-  
 
-  
 
-  
 
-  
 
-  
 
-  
 
-  
 
- var
 
- s: String;
 
- begin
 
- s := IdHTTP1.Get('http://localhost/cgi-bin/mget?name1=Vasya&name2=Pupkin') 
 
-  
 
- <form method=POST action=http://localhost/cgi-bin/mget?>
 
-  
 
-  
 
- <input type=submit>
 
- </form>
 
-  
 
- var
 
- tL: TStringList;
 
- s: String;
 
- begin
 
- tL := TStringList.Create;
 
- tL.Add('name1=Vasya');
 
- tL.Add('name2=Pupkin');
 
- try
 
-    s := IdHTTP1.Post('http://localhost/cgi-bin/mget',tL);
 
- finally
 
-    tL.Free;
 
- end;
 
  
 
  | 
 Ответ отправил: Feniks (статус: Бакалавр) 
Время отправки: 24 июня 2008, 10:06
 Оценка за ответ: 5 
 |  
 
 
Мини-форум вопроса
Мини-форум пуст. 
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. 
 |