Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Delphi. idHTTP. Get и post запросы

Поиск

http://delphi-info.ru/?p=11

В данной статье я объясню как работать с компонентом idHTTP, научимся посылать Get и post запросы.

Для начала ставим компонент idHTTP на форму. Распологается он в вкладке Indy Clients => TidHTTP.

Ставим на форму кнопку (Standard => TButton), текстовое поле (Standard => TMemo).

Рассмотрим пример с get запросом:

var
//Создаём переменную res
res: string;
begin
//Посылаем get запрос
res:=idHTTP1.get('http://yandex.ru/yandsearch?text=qwerty&lr=172');
//Добавляем загруженную страницу в Memo1
Memo1.lines.add(res);
end;

Рассмотрим пример с post запросом:
var
//Создаём переменную res
res: string;
//Создаём переменную Post
Post: TStringList;
begin
//Создаём post запрос
Post:=TStringList.Create;
Post.Add('text=qwerty');
Post.Add('lr=172');
//Отсылаем post запрос
res:=idHTTP1.post('http://yandex.ru/yandsearch.php', Post);
//Добавляем загруженную страницу в Memo1
Memo1.lines.add(res);
end;


Проверка доступности интернет-ссылок

 

Проверяю так:

var st:string;

 

st:=IdHTTP.Get('http://www.yandex.ru/index.html');

Выдает

ResponseCode=200, т.е. все ОК, ссылка доступна

или

ResponseCode=404, - ссылка недоступна

Проблема: в переменную st возвращается весь контент заданной URL, т.е. скачивается вся html-страница. Как сделать так, чтобы вернулась не вся страница, а только несколько байт например. Мне ведь сама страница-то не нужна.

 

Уже пробовал устанавливать свойство RecvBufferSize маленьким, все равно скачивается вся страница.

 

Или есть другой способ проверить интернет-ссылку на доступность?

все в порядке. Нашел.

IdHTTP.DoRequest(hmHead, edit1.text, nil, nil);

При этом посылается всего 708 байт! Контент страницы не выкачивается, что мне и нужно.

 

Спасибо, что навели на мысль.

 


Как узнать свой внешний ip

Если можно, то приведите код.

Используй компонент idHTTP.

 

Код такой:

 

Код Delphi1

 

procedure TForm1.Button1Click(Sender: TObject);

var SL: TStringList;

begin

SL:=TStringList.Create;

HTTP:=HTTP.Create();

SL.Text:=HTTP.Get('http://internet.yandex.ru/'); //Теперь SL-содержит текст с этой странички, в том числе и IP-адрес

end;

 

 

procedure TForm1.Button1Click(Sender: TObject);

var SL: TStringList;

begin

SL:=tStringList.Create;

idHTTP1:=idHTTP1.Create();

SL.Text:=idHTTP1.Get('http://internet.yandex.ru/');

Label1.Caption:='IP-адрес: '+copy(SL.Strings[77],46,13);

Label2.Caption:='Город: '+copy(SL.Strings[92],46,9);

end;

 

Можно сделать очень просто. Послать запрос на yandex допустим и потом поюзав страницу выдрать оттуда IP...

Примеры:

 

Код Delphi1

type

...

idhtp1: TIdHTTP;

...

 

var

...

txt:string;

p,p2:integer;

SL: TStringList;

...

 

function Yandex_IP():string;

SL.Text:=idhtp1.Get('http://internet.yandex.ru/');

txt:=SL.Text

p:=Pos('Мой IP:',txt);

Delete(txt,1,p-1);

p:= Pos('<dd class="item">',txt);

Delete(txt,1,p + 16);

p2:=Pos('</dd>',txt);

Result:= Copy(txt,1,p2-1);

end;

 

или с 2ip.ru

 

Код Delphi1

function 2ip.ru_IP():string;

SL.Text:=idhtp1.Get('http://internet.2ip.ru/');и

txt:=SL.Text;

p:=Pos('Ваш IP адрес:',txt);

Delete(txt,1,p-1);

p:= Pos('</span> <big>',txt);

Delete(txt,1,p + 12);

p2:=Pos('</big>',txt);

Result:= Copy(txt,1,p2-1);

end;


Скачиваем файлы из интернета

Автор: Вадим К

Задача: скачать файл по http в указанную папку с использованием потока.

Делаем форму

Бросаем на форму два TEdit, TProgressBar, одну кнопку и TSaveDialog.

Для кнопки пишем маленький обработчик:

//Этой строкой мы скопируем имя файла SaveDialog1.FileName:=copy(Edit1.Text,LastDelimiter('\⁄',Edit1.Text)+1,maxint);
if SaveDialog1.Execute then
Edit2.Text:=SaveDialog1.FileName;

Теперь на форму добавим IdHTTP и кнопку (Button2) с надписью "начать закачку".

Делаем поток

С обработчиком пока повременим, а напишем самое сложное – класс для потока.

{$R *.dfm}
//---------------------------------------
type
TDownLoader = class (TThread)
protected
procedure Execute; override;
public
property URL:string read FURL write FURL;
property ToFolder:string read FToFolder write FToFolder;
end;

Первые две строки сделаны для того, чтобы было видно, где вписать код. И нажимаем Ctrl+Shift+C. Delphi допишет немного кода. Он теперь будет выглядеть так:

type
TDownLoader = class (TThread)
private
FToFolder: string;
FURL: string;
protected
procedure Execute; override;
published
public
property URL:string read FURL write FURL;
property ToFolder:string read FToFolder write FToFolder;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SaveDialog1.FileName:=copy(Edit1.Text,LastDelimiter('\⁄',Edit1.Text)+1,maxint);
if SaveDialog1.Execute then
Edit2.Text:=SaveDialog1.FileName;
end;

{ TDownLoader }

procedure TDownLoader.Execute;
begin
//здесь мы начнём писать код работы
end;

Компонент idHTTP был брошен на форму только с одной целью – чтобы Delphi добавила все заголовочные файлы в uses. Потом его можно будет удалить. Но можно и самостоятельно вписать в uses файл idHTTP.

Главный код потока

Итак, код обработчика:

procedure TDownLoader.Execute;
var
http:TIdHTTP;
str:TFileStream;
begin
//Создим класс для закачки
http:=TIdHTTP.Create(nil);
//каталог, куда файл положить
ForceDirectories(ExtractFileDir(ToFolder));
//Поток для сохранения
str:=TFileStream.Create(ToFolder, fmCreate);
try
//Качаем
http.Get(url,str);
finally
//Нас учили чистить за собой
http.Free;
str.Free;
end;

end;



Поделиться:


Последнее изменение этой страницы: 2016-08-01; просмотров: 6514; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.4.42 (0.006 с.)