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


Автор: BlueAlien 9.2.2015, 05:27
Доброе время суток. 
У меня есть код, позволяющий авторизоваться на сайте через метод компонента TIdHTTP Post: 
Код

procedure TForm1.Button1Click(Sender: TObject);
var 
LoginInfo: TStringList;
 Response: TStringStream;
begin 
 LoginInfo := TStringList.Create;
 Response := TStringStream.Create('');
 LoginInfo.Add('username=MyName');
 LoginInfo.Add('password=MyPass'); 
IdHTTP1.Post('http://mywebsite.xxx/login.php',LoginInfo,Response); 
Showmessage(Response.DataString); 
 Response.Free;
 LoginInfo.Free;
 end; 

Однако, я не знаю, как загрузить файл на сервер, после всего этого. Не подскажет ли кто? 

Автор: Illusion Dolphin 9.2.2015, 11:54
Сделайте POST на урл для загрузки файла и укажите авторизационную информацию (обычно как минимум куки), полученную при первом запросе. 

Автор: BlueAlien 11.2.2015, 00:24
Цитата(Illusion Dolphin @  9.2.2015,  11:54 Найти цитируемый пост)
Сделайте POST на урл для загрузки файла и укажите авторизационную информацию (обычно как минимум куки), полученную при первом запросе. 

Поясните пожалуйста. 

Автор: Illusion Dolphin 11.2.2015, 11:02
Цитата

Поясните пожалуйста.  

Пояснения выходят за рамки темы обсуждения и находятся в области Web. Почитайте про Cookies, что такое сессия и как они связаны с Cookies, что такое HTTP1.1 и что такое POST запрос. Если останутся ещё вопросы - спрашивайте.

Автор: BlueAlien 12.2.2015, 21:19
Цитата(Illusion Dolphin @  11.2.2015,  11:02 Найти цитируемый пост)
Пояснения выходят за рамки темы обсуждения и находятся в области Web. Почитайте про Cookies, что такое сессия и как они связаны с Cookies, что такое HTTP1.1 и что такое POST запрос. Если останутся ещё вопросы - спрашивайте.

Нет, не выходят. Я вас спрашиваю, про конкретное программирования, прошу привести конкретный пример кода, если можно. 

Автор: Illusion Dolphin 13.2.2015, 07:51
Цитата

про конкретное программирования

Не слышал о таком

Чтобы загрузить файл с авторизацией берёте пример раз http://stackoverflow.com/questions/17819403/delphi-indy-login-and-download-a-file и добавляете в него кусочек из два http://stackoverflow.com/questions/10765661/http-post-with-indy
Ключевые слова тут AllowCookies, CookieManager, HandleRedirects . 

P.S. Ну и в любом случае этого может не хватить т.к. сайты часто защищаются дополнительными средствами типа реквест токенов.

Автор: BlueAlien 14.2.2015, 21:48
Не кажется ли вам, что вы переигрываете? Я вас прошу просто указать мне, что нужно вставить вот в этот код: 
Код

procedure TForm1.Button1Click(Sender: TObject);
var 
LoginInfo: TStringList;
 Response: TStringStream;
begin 
 LoginInfo := TStringList.Create;
 Response := TStringStream.Create('');
 LoginInfo.Add('username=MyName');
 LoginInfo.Add('password=MyPass'); 
IdHTTP1.Post('http://mywebsite.xxx/login.php',LoginInfo,Response); 
Showmessage(Response.DataString); 
 Response.Free;
 LoginInfo.Free;
 end; 

для загрузки файла на сервер, а вы мне что-то толкаете про cookies и про http. При чем они тут, а? 
Блин, неужели нельзя просто ответить на поставленный вопрос? 

Автор: Illusion Dolphin 14.2.2015, 23:33
Цитата

про cookies и про http. При чем они тут, а? 

Хочу обратить ваше внимание на:
Цитата

для загрузки файла на сервер,
IdHTTP1.Post('http://mywebsite.xxx/login.php',LoginInfo,Response); 
авторизоваться на сайте

С учётом того, что авторизация хранится обычно (но не всегда) в сессии, которая обычно (но не всегда) удерживатеся при помощи куков и вам надо сделать POST через протокол HTTP  то мне не понятен ваш вопрос про уместность. 

P.S. Если вы хотите получить код для какого-то конкретного сайта, но не очень хочется вдаваться в подробности программирования и web - то я мог бы вам помочь от 25$ в час (включая общение для уточнения деталей).

Автор: BlueAlien 15.2.2015, 02:48
При чем тут сессия, а? Я уже авторизовался, теперь мне нужно просто запихнуть файл на сервер! 

Автор: Illusion Dolphin 15.2.2015, 10:12
Цитата

При чем тут сессия, а?

В ней запоминается информация, что пользователь зашёл на сайт. И запоминается это в момент входа на сайт. А чтобы второй запрос (загрузка файла, например) был ассоциирован с пользователем, "залогиневшемся" на сайте используются куки, которые были посланы в ответ в первом запросе. Эти же куки надо отправить во второй запрос чтобы сервер узнал что это именно тот пользователь, что был в первом запросе. Вот именно для этого вам надо использовать AllowCookies и CookieManager.

Автор: BlueAlien 15.2.2015, 14:53
Цитата(Illusion Dolphin @  15.2.2015,  10:12 Найти цитируемый пост)
В ней запоминается информация, что пользователь зашёл на сайт. И запоминается это в момент входа на сайт. А чтобы второй запрос (загрузка файла, например) был ассоциирован с пользователем, "залогиневшемся" на сайте используются куки, которые были посланы в ответ в первом запросе. Эти же куки надо отправить во второй запрос чтобы сервер узнал что это именно тот пользователь, что был в первом запросе. Вот именно для этого вам надо использовать AllowCookies и CookieManager.

Вы часом не индус? Зачем мне запоминать куки, если я хочу загрузить файл в том же блоке кода? 
Господи, я задал простой вопрос, неужели нельзя просто на него ответить, а не корчить из себя Хранителя Тайного Знания?

Автор: Keeper89 16.2.2015, 03:27
BlueAlien

вот http://forum.vingrad.ru/index.php?showtopic=382111&view=findpost&p=2634238 Вам были указаны ссылки на куски кода, которые решают подавляющую часть задачи. Надо просто додумать и скомпоновать.

Если же Вы просите готовый код, чтобы тупо скопипастить - называйте цену, в центре помощи.

Автор: BlueAlien 18.2.2015, 01:38
Цитата(Keeper89 @  16.2.2015,  03:27 Найти цитируемый пост)
вот в этом сообщении Вам были указаны ссылки на куски кода, которые решают подавляющую часть задачи. Надо просто додумать и скомпоновать.

Я попросил обьяснить мне, как дополнить вот этот код: 
Код

procedure TForm1.Button1Click(Sender: TObject);
var 
LoginInfo: TStringList;
 Response: TStringStream;
begin 
 LoginInfo := TStringList.Create;
 Response := TStringStream.Create('');
 LoginInfo.Add('username=MyName');
 LoginInfo.Add('password=MyPass'); 
IdHTTP1.Post('http://mywebsite.xxx/login.php',LoginInfo,Response); 
Showmessage(Response.DataString); 
 Response.Free;
 LoginInfo.Free;
 end; 

А вы начали куда-то в сторону разговор уводить. 

Автор: VZyablik 24.2.2015, 02:19
Поржал. 

 smile 

Автор: BlueAlien 24.2.2015, 04:35
Цитата(VZyablik @  24.2.2015,  02:19 Найти цитируемый пост)
Поржал. 

Смех без причины - признак дурачины. 

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