Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2009, 13:25   #1
lightydav
 
Регистрация: 17.09.2009
Сообщений: 7
Вопрос автоматическая проверка на virustotal

привет всем. решил написать маленькую программу - встроить в контекстное меню .ехе файлов пункт "проверить на virustotal". программа должна делать всё автоматически и выводить в memo обработанные результаты, то есть компонент webbrouser будет скрытым (если он вообще мне нужен)...
пока сделал форму с не скрытым webbrouser и двумя кнопками. одна открывает страницу virustotal, вторая должна передавать ему файл, адрес файла пока записан в программе. я не знаю какой код писать здесь.
например, вот так я тренировался на гугле
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
html_tag:oleVariant;
i:integer;
begin
html_tag:=WebBrowser1.oleObject.Document.forms.item(0).elements;
for i:=0 to (html_tag.length -1) do
begin
if (html_tag.item(i).name = 'q') then
html_tag.item(i).value:='строка поиска';
if (html_tag.item(i).name = 'btnG') then
html_tag.item(i).click;
end;
end;
что к чему я разобрался. а вот кусочек текста с virustotal
Код HTML:
<div id="formulario"> 
	<form name="consulta" action="/vt/ru/recepcion" method="post" enctype="multipart/form-data" onSubmit="return identificadorSubida();"> 
		<p class="elemento-form"><input name="archivo" type="file" size="42" /></p> 
		<input type="hidden" id="distribuir" name="distribuir" value="1" /> 
и здесь я ничего не понял. помогите разобраться...

Последний раз редактировалось lightydav; 17.09.2009 в 13:36. Причина: забыл end в коде
lightydav вне форума Ответить с цитированием
Старый 17.09.2009, 18:47   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

так с браузером то просто...заполняешь поле адреса файла(ParamStr ParamCount) и кнопку жмешь
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.09.2009, 12:22   #3
lightydav
 
Регистрация: 17.09.2009
Сообщений: 7
По умолчанию

спасибо за ответ, но я к сожалению не понимаю как с помощью paramstr заполнить поле имени файла

вчера рылся в инете, находил разные варианты решения, но на каждом из них застрял...

я прочитал, что type=file в отличие от text программно доступно только для чтения, но нашёл такой код
Код:
if (html_tag.item(i).name = 'archivo') then
begin
Clipboard.SetTextBuf(PChar('C:\1.exe'));
WebBrowser1.OleObject.Document.forms.item(0).elements.item(i).select;
WebBrowser1.ExecWB(OLECMDID_PASTE, OLECMDEXECOPT_DODEFAULT);
end;
только он затирает буфер обмена. остаётся вариант сохранять его...

а может мне использовать post запрос? это сложно? сложно будет принять ответ сервера через twebbrowser?

ещё прочитал, что кто-то менял тип поля на text, писал в него, менял обратно на file и отсылал серверу. и опять же застрял на том, как программно поменять тип...

пробовал сохранять страницу виртотала у себя, руками менять в ней тип на text, только с неё с такой ни в какую не отправляется...
lightydav вне форума Ответить с цитированием
Старый 18.09.2009, 12:42   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
 function FillForm(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
  var
    i, j: Integer;
    FormItem: Variant;
  begin
    Result := False;
    //no form on document  
  if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
    begin
      Exit;
    end;
    //count forms on document  
  for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
    begin
      FormItem := WebBrowser.OleObject.Document.forms.Item(I);
      for j := 0 to FormItem.Length - 1 do
      begin
        try
          //when the fieldname is found, try to fill out  
        if FormItem.Item(j).Name = FieldName then
          begin
            FormItem.Item(j).Value := Value;
            Result := True;
          end;
        except
          Exit;
        end;
      end;
    end;
  end;
пробывали?
ну и пример
Код:
  //When the document is complete try to fill out the field homepage with the url  
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
    const pDisp: IDispatch; var URL: OleVariant);
  begin
    if FillForm(WebBrowser1, 'homepage', 'http://www.swissdelphicenter.ch') = False then
      ShowMessage('Error. Field not available or no Form found.');
 end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.09.2009, 13:14   #5
lightydav
 
Регистрация: 17.09.2009
Сообщений: 7
По умолчанию

уже пробовал аналогичное - не хочет заполняться через назначение value.
попробовал сейчас ваш вариант - ничего не происходит, и ошибки нет. а если заменить в страничке тип на text, он успешно заполняется.

ещё попробовал прямо в коде страницы поставить value=file:\\\... и тоже не получилось.

у вас есть ещё идеи?

я не выдержал упорства webbrowsera (ну теперь понятно, почему именно "ослик")) и решил использовать его только для получения данных. передавать файл буду, видимо, через post... сейчас пойду гуглить.

если кто-нибудь что-то посоветует, буду очень благодарен!

Последний раз редактировалось lightydav; 18.09.2009 в 14:28.
lightydav вне форума Ответить с цитированием
Старый 19.09.2009, 13:35   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

помоему лучше чисто на ИнДи делать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.09.2009, 13:58   #7
lightydav
 
Регистрация: 17.09.2009
Сообщений: 7
Радость

разобрался с post запросом (действительно очень просто - особенно со сниффером)

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  ASource: TIdMultiPartFormDataStream;
begin
  ASource := TIdMultiPartFormDataStream.Create;
  ASource.AddFile('archivo', 'C:\2.exe', 'multipart/form-data');
  memo1.Text:=IdHTTP1.Post('http://www.virustotal.com/vt/ru/recepcion', ASource);
  ASource.Free;
end;
осталась одна проблема - похоже на виртотале используется аякс, поэтому в мемо попадает только шаблон страницы без результатов... пока не знаю что с этим делать.

а "чисто на инди" - это значит не использовать webbrowser вообще?

вот у меня сейчас появилась мысль - выводить страницу в мемо когда idhttp её всю примет, мне кажется надо вот такую процедуру написать

Код:
procedure TForm1.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
 memo1.text:= idhttp.    //не знаю что писать здесь
end;
это хороший вариант, как вы думаете?

Последний раз редактировалось lightydav; 19.09.2009 в 14:21.
lightydav вне форума Ответить с цитированием
Старый 19.09.2009, 15:19   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

get и post. имитируем аякс. сниффер поможет
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.09.2009, 22:17   #9
lightydav
 
Регистрация: 17.09.2009
Сообщений: 7
По умолчанию

то есть мне нужно изучить аякс? я думаю, должен быть более лёгкий путь

я просмотрел результаты работы сниффера, вот что я понял - после моего запроса к серверу и передачи файла, сервер отвечает что нужна переадресация и ссылкой. idhttp послушно переходит. (а зря!)

как мне сделать, чтобы idhttp выдал мне ссылку переадресации, а не страницу с результатами? я думаю дальше действовать с помощью webbrowser. мне нужно вытащить именно эту ссылку.

я уже пробовал запрещать переадресацию, приложение выдало ошибку 303 и заглохло.
как избавиться от ошибки?
lightydav вне форума Ответить с цитированием
Старый 20.09.2009, 22:24   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я помоему написал
Цитата:
имитируем аякс. сниффер поможет
Цитата:
я уже пробовал запрещать переадресацию, приложение выдало ошибку 303 и заглохло.
как избавиться от ошибки?
try except end; о чем то говорит?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
автоматическая проверка балланса денег ladonin PHP 0 26.08.2009 18:50
автоматическая нумерация Screame Microsoft Office Excel 4 01.08.2009 00:28
Microsoft Office Outlook : Автоматическая проверка почты Мих@ил Софт 0 25.11.2007 11:32
Автоматическая группировка buk Microsoft Office Excel 5 20.09.2007 13:35
Автоматическая авторизация Novice777 Работа с сетью в Delphi 2 01.03.2007 16:56