В этой статье хотел бы поговорить об отправке post-запроса на сервер (на сайт). Мы уже проходили это, только в той части мы проходили о том, как отправить post-запрос на сервер (сайт) только текстовые данные, а если нам надо «залить» например на хостинг картинку или на файлообменник файл, то как тогда быть, вот об этом и поговорим. Все известно, что страница с отправкой такими данными (точнее форма) имеет тип — multipart-from. Для того, чтобы работать нам с таким типом данных форм, необходимо в Uses подключить модуль — idMultiPartFormData. Отлично, теперь используя данный модуль мы можем в своих приложения использовать объект типа данных — TIdMultiPartFormDataStream. Давайте уже приступим к работе с этими данными. Ну как всегда у нас на форме
- TIdHTTP
- TIdAntiFreeze
- TButton
Для начала нам необходимо выбрать сайт, куда мы будем заливать изображение, файл или еще что-то. Я выбрал imagezzz.ru. На этот фотохостинг я буду «заливать» изображения и затем получу ссылку на это изображения, а делать с ней мы что захотим, то и будем. Для начала создаем нашу переменную, но для этого нам надо узнать имя <input type=»file»> на данном сайте, а также адресс скрипта, который обрабатывает данную форму. Для этого я посмотрел исходный код данной страницы сайта и что обнаружил.
- Имя <input type=»file»> — userimage
- Скрипт обработки — imagescript.php
Так вроде бы все узнали, создаем переменную и заполняем это поле, путем указания «путь к заливаему файлу на фотохостинг«. Далее все как мы проходили обычный post-запрос к указанному скрипту и его обработка, обычный парсинг данных, как Вам удобно или как я Вам показывал парсинг данных или через регулярные выражения. Вот и все, правда ничего сложного нету?
procedure TForm1.Button1Click(Sender: TObject);
var
MultiData:TIdMultiPartFormDataStream;
html:WideString;
begin
try
MultiData:=TIdMultiPartFormDataStream.Create;
MultiData.AddFile('userimage','C:\1.jpg','image');
MultiData.AddFormField('tags1','1,2');
html:=IdHTTP1.Post('https://imagezzz.ru/imagescript.php',MultiData);
Delete(html,1,pos('Ссылка на страницу с изображением',html));
Delete(html,1,pos('value="',html)+length('value="')-1);
Delete(html,pos('">',html),length(html));
MultiData.Free;
except
on e:Exception do
MultiData.Free;
end;
end;