Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798

Как отправить запрос на онлайн-сервис

19.08.2010, 11:34. Показов 3287. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья, этот вопрос продолжение темы - Как получить контрольную сумму(MD5, SHA1, SHA256) у файла. Вопрос по MD5 решил, теперь нарисовался другой вопрос.

Как полученый MD5 отправить на проверку в онлайн-серсис и вернуть результат проверки - количество антивирусов, которые определили по MD5 вирус. (Result: 32 /40 (80.0%)). Пример определения

Пробую оформить запрос так, но у меня ничего не получается. Вернее в Memo грузится текст обычной пустой страницы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString md5 = "0045BCBD3047391E47F3B56DC7C7F2F2";
    TStringList *lst = new TStringList;
    TStringStream *response = new TStringStream("");
 
    lst->Add("chain=" + md5);
 
    try{
       IdHTTP1->Post("http://www.virustotal.com/search.html", lst, response);
      }
    catch(EIdSocketError &se){
       ShowMessage(se.Message);
      }
    catch(Exception &e){
       ShowMessage(e.Message);
      }
 
    delete IdHTTP1;
    delete lst;
    delete response;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdHTTP1Redirect(TObject *Sender, AnsiString &dest,
      int &NumRedirect, bool &Handled)
{
    Memo1->Lines->Add(IdHTTP1->Get(dest));
    Handled = false;
}
//---------------------------------------------------------------------------
Подскажите рабочим кодом? Как это сделать правильно? Буду сильно признателен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.08.2010, 11:34
Ответы с готовыми решениями:

Как отправить Https Get запрос?
Приветствую! Требуется отправить следующий Get-запрос, который должен вернуть информацию о клиентах в json формате: С HTTPS...

Как отправить запрос и получить правильно СОМ-порт
Всем доброго времени суток... Начал разбираться с COM портом, и возникла проблема. На ком порту висит железка. Мы ей запрос, она ответ......

Как лучше монетизировать онлайн сервис?
создал программку на пхп. в которую вводишь один текст, а на выходе получаешь другой. По статистике яндекса в месяц 1400 человек ищут...

18
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
20.08.2010, 21:11
попробуйте через TIdMultiPartFormDataStream
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
21.08.2010, 14:40  [ТС]
iama, Если не затруднит.
Цитата Сообщение от Maestro Посмотреть сообщение
Подскажите рабочим кодом
0
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
21.08.2010, 14:45
когда-то такое писал:
C++
1
2
3
4
5
6
7
8
    #include <IdMultipartFormData.hpp>
 
    TIdMultiPartFormDataStream *data = new TIdMultiPartFormDataStream();
    data.AddFormField('table_data', 'lalala');
    data.AddFormField('button_count', 'lalala'));
    res = idHTTP.Post(url, data);
    ShowMessage(res);
    delete data;
извините, лень переписывать под ваш сайт
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
21.08.2010, 15:54  [ТС]
iama, Я надеюсь что вам никто никогда так не ответит
Цитата Сообщение от iama Посмотреть сообщение
лень переписывать под ваш сайт
Если вы вызвались помочь, то помогите, а не кусок непонятного кода кинули и всё. Это не помощь, а попытка позиционировать себя со стороны знатока и не делает вам чести. Вы даже не удосужились сказать в какой обработчик вставить код, какой компонент использовать и что этот код на делфи.
0
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
21.08.2010, 16:01
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    
    AnsiString md5 = "0045BCBD3047391E47F3B56DC7C7F2F2", res;
    TIdMultiPartFormDataStream *data = new TIdMultiPartFormDataStream();
 
    data.AddFormField("chain", md5);
 
    try{
       res = IdHTTP1->Post("http://www.virustotal.com/search.html", data);
      }
    catch(EIdSocketError &se){
       ShowMessage(se.Message);
      }
    catch(Exception &e){
       ShowMessage(e.Message);
      }
    ShowMessage(res);
    delete data;
}
//---------------------------------------------------------------------------
IdHTTP1 типа TidHTTP создается в дебаг тайме.
Могут быть траблы с кодировками, но будем решать проблеммы по мере поступления.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
21.08.2010, 16:49  [ТС]
В принципе компилируется, но мне кажется для idHTTP1 нужен вызов обработчика OnRedirect, потому что при нажатии на кнопку - выпадает MessageBox с сообщением HTTP\1.0.3 See Other - а это метод не назначен
0
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
21.08.2010, 17:08
Maestro, а у вас HandleRedirects в idHTTP1 стоит?

Добавлено через 3 минуты
и с чего вы взяли, что нужно делать запрос постом? проблемма решается через:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    try {
       res = IdHTTP1->Get("http://www.virustotal.com/search.html?chain=0045BCBD3047391E47F3B56DC7C7F2F2");
       ShowMessage(res);
      }
    catch(EIdSocketError &se){
       ShowMessage(se.Message);
      }
    catch(Exception &e){
       ShowMessage(e.Message);
      }
}
2
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
21.08.2010, 18:14  [ТС]
Цитата Сообщение от iama Посмотреть сообщение
у вас HandleRedirects в idHTTP1 стоит?
Нет, я поставил HandleRedirect = true но код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::Button1Click(TObject *Sender)
{
       String res;
       try {
           res = IdHTTP1->Get("http://www.virustotal.com/search.html?chain=0045BCBD3047391E47F3B56DC7C7F2F2");
          }
        catch(EIdSocketError &se){
           ShowMessage(se.Message);
          }
        catch(Exception &e){
           ShowMessage(e.Message);
          }
 
    RichEdit1->Lines->Add(res);
}
//---------------------------------------------------------------------------
Возвращает html страницу без результата проверки.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
03.12.2012, 22:00  [ТС]
Приветы всем.

Возвращаюсь к теме о получении данных через сервис VirusTotal. Я генерирую такую строку
Code
1
http://www.virustotal.com/latest-report.html?resource=0045BCBD3047391E47F3B56DC7C7F2F2
Где эта часть постоянная
Code
1
http://www.virustotal.com/latest-report.html?resource=
А эта переменна и является контрольной суммой MD5 файла, который нуждается в проверке по MD5
Code
1
0045BCBD3047391E47F3B56DC7C7F2F2
Но я видимо что-то не так делаю, поскольку если вбить ссылку вручную, то страница открывается, а если кодом, то вариант как в прошлом было, не проходит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
       String res;
       try {
           res = IdHTTP1->Get("http://www.virustotal.com/latest-report.html?resource=0045BCBD3047391E47F3B56DC7C7F2F2");
          }
        catch(EIdSocketError &se){
           ShowMessage(se.Message);
          }
        catch(Exception &e){
           ShowMessage(e.Message);
          }
 
    RichEdit1->Lines->Add(res);
Как мне получить страницу результата проверки?
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
04.12.2012, 06:09
Попробуйте HandleRedirects у компонента IdHTTP1 поставить в true.
И должно перенаправить запрос, и в исходном коде html страницы будет результат.
Пример
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<tr>
                <td>McAfee+Artemis</td>
                <td class="text-red">Artemis!0045BCBD3047</td>
                <td>20100203</td>
            </tr>
            
            <tr>
                <td>nProtect</td>
                <td class="text-red">Trojan/W32.Inject.28780</td>
                <td>20100203</td>
            </tr>
            
            <tr>
                <td>CAT-QuickHeal</td>
                <td class="text-red">Trojan.Inject.alsl</td>
                <td>20100203</td>
            </tr>
            
            <tr>
                <td>McAfee</td>
                <td >-</td>
                <td>20100203</td>
            </tr>
            
            <tr>
                <td>K7AntiVirus</td>
                <td class="text-red">Trojan.Win32.Inject.alsl</td>
                <td>20100203</td>
            </tr>
            
            <tr>
                <td>TheHacker</td>
                <td >-</td>
                <td>20100203</td>
            </tr>
            
            <tr>
                <td>VirusBuster</td>
                <td class="text-red">Trojan.DL.Cutwail.CTU</td>
                <td>20100203</td>
            </tr>
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.12.2012, 07:17
https://www.cyberforum.ru/blog... og608.html

Будет время просмотрю...

Добавлено через 11 минут
C++
1
2
3
4
  lst->Add("chain=" + md5);
 
    try{
       IdHTTP1->Post("http://www.virustotal.com/search.html", lst, response);
Походу не правильно пост делаете
Там
Code
1
2
3
4
POST 
/search/
csrfmiddlewaretoken=d434f94f794757996b7d182a620fb1e6
&query=0045BCBD3047391E47F3B56DC7C7F2F2
Смотрите снифером
1
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
04.12.2012, 16:49  [ТС]
Цитата Сообщение от Xank Посмотреть сообщение
Попробуйте HandleRedirects у компонента IdHTTP1 поставить в true.
Поставил, но не работает даже простой код.

C++
1
2
3
4
5
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   String res = IdHTTP1->Get("http://www.virustotal.com/latest-report.html?resource=0045BCBD3047391E47F3B56DC7C7F2F2");
   Memo1->Lines->Add(res);
}
Цитата Сообщение от Avazart Посмотреть сообщение
Будет время просмотрю...
Пожалуйста, буду очень благодарен и признателен вам. За ссыслку спасибо, грузить сайт в мемо\список умею, а вот с этим не выходит и всё тут.

Цитата Сообщение от Avazart Посмотреть сообщение
Смотрите снифером
Я не умею. Если бы показали как это делать.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.12.2012, 22:00
Там протокол HTTPs, куки парсить надо, а перенаправление вручную обрабатывать.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// Запрос
//POST /search/ csrfmiddlewaretoken=d434f94f794757996b7d182a620fb1e6&query=0045BCBD3047391E47F3B56DC7C7F2F2
//             ^
//  POST
//  /search/
//   csrfmiddlewaretoken=d434f94f794757996b7d182a620fb1e6
//  & query=0045BCBD3047391E47F3B56DC7C7F2F2
IdHTTP1->IOHandler= IdSSLIOHandlerSocketOpenSSL1;
IdHTTP1->Request->Referer= "https://www.virustotal.com/";
 
std::auto_ptr<TStringList> SL(new TStringList);
std::auto_ptr<TStringList> Token(new TStringList);
 
String Url= "https://www.virustotal.com/#search";
String MD="0045BCBD3047391E47F3B56DC7C7F2F2";
String Content;
 
try
    {
     IdHTTP1->Get(Url); // Страница  поиска
     // Парсим куки получаем    csrfmiddleware token
     IdHTTP1->Response->RawHeaders->Extract("Set-cookie",Token.get());
     int pos1= Token->Text.Pos("=")+1;
     int pos2= Token->Text.Pos(";");
     Token->Text=  Token->Text.SubString(pos1,pos2-pos1);
 
     Url="https://www.virustotal.com/search/";
     SL->Add(" csrfmiddlewaretoken="+Token->Text);
     SL->Add("query="+MD);
 
     // Пост  запрос на поиск
     try { Content= IdHTTP1->Post(Url,SL.get() ) ; }  // 302 Перенаправление
     catch(EIdHTTPProtocolException &E)
         {
            switch(E.ErrorCode)
             {
                case 301:
                case 302: Content=IdHTTP1->Get(IdHTTP1->Response->Location);break;
                default: throw;
             }
         }
    } // try
__finally { IdHTTP1->Disconnect(); } // закрываем соединение
 
Memo1->Text= Content; //  Выводим контент
}
//---------------------------------------------------------------------------
Вложения
Тип файла: rar www.virustotal.com.rar (921.3 Кб, 21 просмотров)
2
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
05.12.2012, 02:07  [ТС]
Avazart, Сердечно благодарю. Вы мне очень сильно помогли.

Не подскажете, как вернуть результат, вернее из всего полученого текста страницы, получить только одну строку Detection ratio: 32 / 40 ?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.12.2012, 02:09
Парсить
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
05.12.2012, 02:30  [ТС]
TinyXML пойдёт?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.12.2012, 02:32
Пойдет, но его прикручивать надо...

Для одной строчки и boost/regex сгодится
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
05.12.2012, 16:57  [ТС]
Ещё раз привет. Код работает зашибенно, слов нет. Вопрос по ssleay32.dll и libeay32.dll их как-то можно собрать вместе с проектом, чтобы на выходе получить только один .exe файл и не кидать в папку с прогой две .dll'ки? Если нет, то не критично.

И ещё вопросик, когда данные принимаются я не пойму почему не срабатывают переносы на новую строку. Пытался найти индекс нужной строки
C++
1
Memo1->Lines->IndexOf("регулярная строка")
Но из-за этих непереносов не могу, сохраняю в файл, гружу из файла, всё ок, а вот сразу как принял данные в список, почему-то не выходит так. Научите как правильно?
Миниатюры
Как отправить запрос на онлайн-сервис  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.12.2012, 16:57
Помогаю со студенческими работами здесь

Онлайн-сервис для сохранения интернет-страницы как картинки
Вопрос в теме. Знаю, что есть плагины для Firefox и Chrome, но есть ли такой функционал online?

ClientSocket/ServerSocket: как отправить клиенту список тех, кто онлайн?
как только что присоединившемуся клиенту (ClientSocket) отправить список, тех кто сейчас онлайн на сервере(serverSocket)?

Как отправить GET запрос
Приветствую всех. Новичок в php и по этому проблема. Нужен получить токен vk. Как отправить GET запрос на адрес $url =...

Как отправить get запрос?
Как отправить простейший get запрос? читал про сокеты ничего не понял, подскажите куда копнуть в этом деле. с с++ работаю буквально...

Как отправить запрос к ВК
Привет всем. Отправляю запрос к вк апи HttpRequest req = new HttpRequest(); HttpResponse resp; req.Cookies...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru