Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 30.07.2010, 18:29
hugolom hugolom вне форума
Новичок
 
Регистрация: 25.04.2010
Сообщения: 99
Репутация: 9
По умолчанию

все равно я безпонятие как делать, т.к. с этими запросами только начал работать
Ответить с цитированием
  #17  
Старый 30.07.2010, 19:09
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

friz, спасибо!
1. Можете найти "HTTP Analyzer V5" или любой другой снифер.
2. Ползем на сайт, заполняем форму "Загрузите картинку" тобишь
указываем картинку и если надо то теги и кликаем кнопку "Загрузить".
3. Смотрим какие действия и на какие адреса браузер шлет запросы нас интересует "Post"
4. Реализуем если нужно отправить только текст то можно использовать TStringList, а для отправки файла(ов) TIdMultiPartFormDataStream в uses нужно добавить IdMultipartFormData;

пример для TStringList:
Код:
var
SL: TStringList;
Otvet: String;
begin
SL:= TStringList.Create;
SL.Add('number=' +edit1.text);
{
Заполняем: 
1. "number" название поля 
2. "=" это разделитель названия поля и его значения при использовании TStringList он обязателен
3. в edit1.text будет значение поля 
}
SL.Add('massage=' +edit2.text);
SL.Add('value=Загрузить');	//значение в кавычки брать не надо Вот так не верно bas.Add('value="Загрузить"');
Otvet:= IdHTTP1.Post('http://delphisources.ru/', SL);
SL.Free;
end;

пример для TIdMultiPartFormDataStream:
Код:
var
MD: TIdMultiPartFormDataStream;
Otvet: String;
begin
MD:= TIdMultiPartFormDataStream.Create;
MD.AddFormField('text', edit1.text);
{
Заполняем: 
1. "text" название поля 
2. "=" не надо
3. в edit1.text будет значение поля 
}
MD.AddFile('uploadfile', edit2.text, '');
{
Заполняем: 
1. "uploadfile" название поля 
2. "=" не надо
3. в edit2.text будет значение поля тобишь адрес файла "C:\My.jpg"
4. '' оставляем пустым само заполнится или задаем принудительно к примеру "multipart/form-data"
}
MD.AddFormField('value', 'Загрузить');	//про кавычки написано выше
Otvet:= IdHTTP1.Post('http://delphisources.ru/', MD);
MD.Free;
end;

5. Возможно перенаправление на другой адрес обрабатывать ручную или сделать так idHTTP1.HandleRedirects:= true;

Последний раз редактировалось pesi, 09.08.2010 в 11:56.
Ответить с цитированием
  #18  
Старый 30.07.2010, 20:32
Аватар для RusMaXXX
RusMaXXX RusMaXXX вне форума
Начинающий
 
Регистрация: 01.10.2008
Сообщения: 138
Версия Delphi: 7
Репутация: 21
По умолчанию

вот пример того, как залить картинку на хостер... смотри вложение

данный пример только "заливает" картинку, твое задание, из полученного ответа "выдрать" нужную инфу
Вложения
Тип файла: rar send_img.rar (8.2 Кбайт, 53 просмотров)
Ответить с цитированием
  #19  
Старый 30.07.2010, 22:00
hugolom hugolom вне форума
Новичок
 
Регистрация: 25.04.2010
Сообщения: 99
Репутация: 9
По умолчанию

RusMaXXX , спасибо.


Но у меня не получаеться найти текст под тегами, я пробовал парсить, то ничего не выходило то какие иероглефы


функцией
Код:
function Pars(T_, ForS, _T: string): string;
var
  a, b: integer;
begin
  Result := '';
  if (T_ = '') or (ForS = '') or (_T = '') then
    Exit;
  a := Pos(T_, ForS);
  if a = 0 then
    Exit
  else
    a := a + Length(T_);
  ForS := Copy(ForS, a, Length(ForS) - a + 1);
  b := Pos(_T, ForS);
  if b > 0 then
    Result := Copy(ForS, 1, b - 1);
end;


Как вытащить тогда ссылку под тегами? желательно на прямую, а не из мемо(как в исходнике)
Ответить с цитированием
  #20  
Старый 31.07.2010, 09:19
Аватар для RusMaXXX
RusMaXXX RusMaXXX вне форума
Начинающий
 
Регистрация: 01.10.2008
Сообщения: 138
Версия Delphi: 7
Репутация: 21
Лампочка

hugolom тебе нужна прямая ссылка на картинку, без всяких там превью и т.п.? если да, то вот пример, смотри вложение
Изображения
Тип файла: jpg screen.JPG (24.4 Кбайт, 28 просмотров)
Вложения
Тип файла: rar send_img.rar (9.6 Кбайт, 27 просмотров)
Ответить с цитированием
  #21  
Старый 31.07.2010, 14:22
hugolom hugolom вне форума
Новичок
 
Регистрация: 25.04.2010
Сообщения: 99
Репутация: 9
По умолчанию

Да, все работает, но я решил переделать на radikal.ru,

Код:
  begin
    FormData := TIdMultiPartFormDataStream.Create;
    try
      FormData.AddFile('F', ed_file.Text, 'image/jpeg'); // я не понял откуда 'mage/jpeg в вас еще

      IdHTTP.HandleRedirects := True;
      Response := idHTTP.Post('http://www.radikal.ru/action.aspx', FormData);

      S := pos('[IMG]''', Response) + Length('[IMG]''');; 
      E := pos('''[/IMG]', Response);
      link := Copy (Response, S, E - S);
      ed_link.Text := link;

чувстую опять проблема с парсингом ?
Ответить с цитированием
  #22  
Старый 31.07.2010, 18:32
Аватар для RusMaXXX
RusMaXXX RusMaXXX вне форума
Начинающий
 
Регистрация: 01.10.2008
Сообщения: 138
Версия Delphi: 7
Репутация: 21
По умолчанию

вот рабочий пример, в результате, получаешь ссылку на картинку (но без BBCode, чисто ссылка)

в след. раз, мозгуй сам... за основу бери эти коды + снифер, и в путь )))
Изображения
Тип файла: jpg screen.JPG (19.4 Кбайт, 21 просмотров)
Вложения
Тип файла: rar [www.radikal.ru] send_img.rar (9.1 Кбайт, 51 просмотров)
Ответить с цитированием
  #23  
Старый 01.08.2010, 00:48
Byblick32 Byblick32 вне форума
Прохожий
 
Регистрация: 31.07.2010
Сообщения: 6
Репутация: 10
По умолчанию

Привет, пытаюсь загрузить картинку в группу вконтакте.
Пройдясь снифером определил какие щапросы должны быть отправлены:
1. POST-запрос на один из серверов вконтакте, для каждого альбома это один неизменный сервер.
2. После POST-запроса идет редирект на сгенерированный URL вида
Код:
http://vkontakte.ru/photos.php?act=done_add&mid=28229780&aid=114626128&gid=11271478&server=4435&photos=e7f30c8480:x&hash=47a9b92a543a013f0b35d477464c6af8
3. После этого редирект на страницу редактор картинки
Код:
http://vkontakte.ru/photos.php?act=editphotos&id=114626128&oid=-11271478&u=1

IdHTTP1.HandleRedirects в true, хранение кукисов в IdHttp включено.


Код:
procedure TForm1.Button1Click(Sender: TObject);
var params:TStringList;
data : TIdMultiPartFormDataStream;
res,s,location,photos,hash:string;
start,stop:integer;
begin
Params:=TstringList.Create;
/////// АВТОРИЗАЙИЯ  /////////////////
Params.Add('email=my_mail');
Params.Add('pass=my_pass);
Params.Add('expire=');
Params.Add('vk=');
res:=idHttp1.Post('http://login.vk.com/?act=login', Params);
Params.Clear;
 s:=Copy(res, Pos('value', res)+7, 56);
Params.Add('s='+Copy(res, Pos('value', res)+7, 56));
Params.Add('op=slogin');
Params.Add('redirect=1');
Params.Add('expire=0');
Params.Add('to=');
IdHTTP1.HandleRedirects:=true;
res:=IdHttp1.Post('http://vkontakte.ru/login.php', Params);
Params.Clear;
/////// *КОНЕЦ*  /////////////////


////////  ЗАГРУЗКА ИЗОБРАЖЕНИЯ //////////
data := TIdMultiPartFormDataStream.Create;
data.AddFormField('act', 'do_add');
data.AddFormField('id', '114626128');
data.AddFormField('aid', '114626128');
data.AddFormField('gid', '11271478');
data.AddFormField('mid', '28229780');
data.AddFormField('hash', '4d14dca7d838103b8b674892215687f1');
data.AddFormField('vk', '');
data.AddFormField('rhash', '60b06e4bf7502e57c1c69fe004c0f8e6');
data.AddFile('file1','c:\5018_Aleksey_Kalugin_-_Pustie_zemli.jpg','image/jpeg');
  IdHTTP1.HandleRedirects:=true;
res:=IdHttp1.Post('http://cs4435.vkontakte.ru/upload.php', data);
 Memo1.Text:=res; //возвращаеться ~ вот такой код:
Код HTML:
<html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1251" /> <script> var t = setTimeout("location.href='http://vkontakte.ru/login.php?op=logout'", 7000); </script> </head> <body> <div> <img src="http://vkontakte.ru/images/progress.gif"> </div> <form id="f" name="f" method="post" action="http://vkontakte.ru/photos.php?act=done_add&mid=28229780&aid=114626128&gid=11271478&server=4435&photos=6c19149e03:x&hash=d28d1c09b90b66dc67ab0da4b714c1a0"> /*вот этот URL*/ <input type='hidden' name='act' value='done_add' /><input type='hidden' name='mid' value='28229780' /><input type='hidden' name='aid' value='114626128' /><input type='hidden' name='gid' value='11271478' /><input type='hidden' name='server' value='4435' /><input type='hidden' name='photos' value='6c19149e03:x' /><input type='hidden' name='hash' value='d28d1c09b90b66dc67ab0da4b714c1a0' /><input type='hidden' name='pda' value='' /> </form> <iframe name="mf" onload="try{if (this.contentWindow.location.href.indexOf('slogin') != -1) {clearTimeout(t); if (this.contentWindow.location.href.indexOf('nonenone') != -1) {location.href='http://vkontakte.ru/login.php?op=logout&to=cGhvdG9zLnBocD9hY3Q9ZG9uZV9hZGQmbWlkPTI4MjI5NzgwJmFpZD0xMTQ2MjYxMjgmZ2lkPTExMjcxNDc4JnNlcnZlcj00NDM1JnBob3Rvcz02YzE5MTQ5ZTAzOngmaGFzaD1kMjhkMWMwOWI5MGI2NmRjNjdhYjBkYTRiNzE0YzFhMA--'; return false;} document.f.submit();}} catch(e) {}" border="0" style="border:0px; background-color:#FFF" src="http://login.vk.com/?vk=" width="1" height="1"></iframe> </body> </html>

И вот что еще я заметил, если сгенерированный URL подставить в адресную строку браузера, то картинка загружается в альбом.

Я думаю ответ близок, помогите кому не лень.
Ответить с цитированием
  #24  
Старый 01.08.2010, 03:23
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Так кто мешает распарсить код и сделать пост с указанными параметрами на указанный урл?
З.Ы. погрызи инфо по Vkontakte API.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #25  
Старый 01.08.2010, 11:23
Byblick32 Byblick32 вне форума
Прохожий
 
Регистрация: 31.07.2010
Сообщения: 6
Репутация: 10
По умолчанию

DJ PhoeniX, меня тоже посещала такая идея, но такой запрос возвращает тоже самое, только с другим hash

На счет API посмотрю, спасибо
Ответить с цитированием
  #26  
Старый 01.08.2010, 11:51
Byblick32 Byblick32 вне форума
Прохожий
 
Регистрация: 31.07.2010
Сообщения: 6
Репутация: 10
По умолчанию

Проблема почти решена.
Я говорил, что если сгенерированный URL подставить в адресную строку браузера, то картинка загружается в альбом. Это и есть ключ к ответу)
Просто подставить этот URL в WebBrowser1.Navigate() и вуаля.
Только предварительно авторизоваться с этим браузером:

Код:
WebBrowser1.Navigate('http://login.vk.com/?act=login&email=ваш_емэйл@yandex.ru&pass=ваш_пароль&expire=&vk=');
Sleep(3000);
WebBrowser1.Navigate(сгенерированный URL);

Теперь надо получить исходный код отображаемой в браузере страницы, распарсить и получить ссылку на загруженую картинку.
Ответить с цитированием
  #27  
Старый 01.08.2010, 11:57
Byblick32 Byblick32 вне форума
Прохожий
 
Регистрация: 31.07.2010
Сообщения: 6
Репутация: 10
По умолчанию

Но я думаю есть возможность реализовать это без веббраузера. Если ко знает, пожалуйста, не поленитесь, помогите.
Ответить с цитированием
  #28  
Старый 06.01.2011, 21:50
grom4ik7 grom4ik7 вне форума
Прохожий
 
Регистрация: 09.06.2010
Сообщения: 12
Репутация: 10
По умолчанию

Можете кто-то перезалить на какой-то файлообменник

[www.radikal.ru] send_img.rar (9.1 Кбайт, 11 просмотров)

Не могу скачать . Заранее спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:02.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter