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

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

19.08.2010, 11:34. Показов 3331. Ответов 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
8489 / 6156 / 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
8489 / 6156 / 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
8489 / 6156 / 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
8489 / 6156 / 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
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru