Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > http get post


Автор: YahоО 25.3.2021, 18:27
Embarcadero® C++Builder 10.3 Version 26.0.36039.7899 пару дней как скачал и установил, симпатичная вещица, пробежался по основам С++, ну думаю изучать можно, вроде бы понятно что там пишут в книгах умных. Это ж классика, сложить умножить, полиморфизм, наследование и т.д., однако самое любопытство разбирает, а как с интернетом эта штука дружит или нет? Погуглил что найдется, c++ https get post query Builder  и т.п., из того что смог найти по интересующему вопросу аж ничего работающего! И зачем то все больше указок на Delphi чем на С++, но мне то не Delphi сейчас нужно, интересует же как в С++ контактировать например со своим собственным сайтом для начала.
Для этого примера:
Код

#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <string>
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdHTTP.hpp>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>
using namespace std;
int main(void)
{
  TIdHTTP *IdHTTP1 = new TIdHTTP(NULL);
  String page;
   page = IdHTTP1->Get("https://www.cyberforum.ru");
  system("PAUSE");
  return 0;
}

показывает что 43 ошибки не позволяют скрипту работать.
То ли Embarcadero не самый лучший выбор, и надо как то его настраивать и дополнять и пополнять и ремонтировать и усовершенствовать,
то ли версии не те, а скрипт то и не большой как бы..., а может ошибка именно в нем какая имеется, или существует где то другой "современный" скрипт для выполнения правильных запросов, и отправки файлов на сервер?

Автор: Romikgy 25.3.2021, 18:31
1. проект с поддержкой vcl ? 
2. такие вещи не делаются из консольных приложений 
3. у билдера нету скриптов !

Автор: YahоО 25.3.2021, 19:13
1. vcl вроде бы да, но им не пользовался, не дочитал еще до этого момента, хотел для консольного приложения что либо сотворить. 
2. А надо именно в vcl пробовать?
3. у билдера нету скриптов - да, похоже терминологию мне надо менять при переходе от javascript к C++  smile
4. А нету ли у Вас "рабочего" файла (проекта) чтобы душа моя не расстраивалась от того что какой то неполноценный у меня попался Embarcadero?

Автор: SVN74 25.3.2021, 23:13
С HTTP можно работать на голых сокетах и на любых яп, там ничего сложного нет, почитайте протокол http и все поймете...  smile 

Автор: YahоО 26.3.2021, 01:16
SVN74,  ну что ж, будем искать, голые сокеты, если мой Embarcadero без посторонней помощи не справляется smile
Ага, как вот найду про эти самые протоколы, да кааак почитаю про них,  да как пойму я их, так и затрепыхаются энти самые сукеты! А то два дня гоняю гугл впустую то по curl то по boost то по beast и poco, а оказывается голых гуглить надо, главное не промахнуться.

Спасибо за ценное направление, надеюсь теперь дело двинется с мертвой точки. Может быть. Книжками уже обложился авторов разных, из того удалось скачать.

Автор: Romikgy 26.3.2021, 11:43
Цитата(YahоО @  25.3.2021,  18:13 Найти цитируемый пост)
1. vcl вроде бы да, но им не пользовался, не дочитал еще до этого момента, хотел для консольного приложения что либо сотворить. 

все компаненты , в большей или меньшей мере используют vcl 
Цитата(YahоО @  25.3.2021,  17:27 Найти цитируемый пост)
TIdHTTP *IdHTTP1 = new TIdHTTP(NULL);

это уже затрагивает процесс использования... 
Цитата(YahоО @  25.3.2021,  18:13 Найти цитируемый пост)
2. А надо именно в vcl пробовать?

нет , можно и голом winapi написать 
Цитата(YahоО @  25.3.2021,  18:13 Найти цитируемый пост)
4. А нету ли у Вас "рабочего" файла (проекта)


нет 

PS 

Цитата(YahоО @  25.3.2021,  17:27 Найти цитируемый пост)
page = IdHTTP1->Get("https://www.cyberforum.ru");

вы создали объект http , а просите работать с https ... 
разница скриптовых языков по отношению с компилируемыми , что они более типизированы .... и если вам надо работать с https значит вам нужны компонетны именно для этого ... что тянет поддержку SSL (это отдельный компонент как правило) .
То есть вам необходимо понять сначало специфику С++, в отрыве от яваскрипта , и только после заниматься реализацией. ИМХО

Автор: YahоО 26.3.2021, 19:20
Romikgy, давно ли Вы катались на коньках? 
Наверно же не было такого - на тебе дядя коньки 44 размера и даже если ты их видишь впервые то надень и катайся, можешь книжку почитать как на них кататься, но показать личным примером как это делается ни за что! Сомневаюсь чтобы в этом случае, т.е. самостоятельного со скрипом освоения неведомой темы, без малейшего представления как это делается Вы бы получили удовольствие, удовлетворение и понимание, а еще и правильные навыки, а еще и в кратчайшие сроки.
И кстати, возможно не только мне бы пригодился пример для С++ для http+s (по вопросу № 4), но многим начинающим изучение, где практика помогает в освоении теории.
Специалистам, профи, гуру, профессуре СЛАБО набросать классический пример для страждущих! а ведь когда то уважаемые люди радовались вопросам любознательных и не боялись конкуренции)))))
Ну что же, книжки похоже это наше всё!

Автор: SVN74 26.3.2021, 21:00
Вот отличная статья с JavaRush о протоколе HTTP https://javarush.ru/groups/posts/2521-chastjh-3-protokolih-httphttps
Возьмите запустите просто голый серверный сокет  на 80-м порту и сделайте с любого браузера запрос на этот сервер, - у вас появится строка запроса на вашем сервере от браузера, затем согласно статьи отправьте с вашего сервера обратный лист, - на вашем браузере появится страничка... Вот и ВСЕ, что тут сложного?
 

Автор: Romikgy 26.3.2021, 22:17
YahоО, вам не СЛАБО ... значит катайтесь на коньках.
Счастливо.

Автор: YahоО 26.3.2021, 23:00
SVN74, благодарю за ссылку. Прочитал:
https://javarush.ru/groups/posts/2514-vvedenie-v-enterprise-razrabotku
https://javarush.ru/groups/posts/2519-chastjh-2-pogovorim-nemnogo-ob-arkhitekture-po
https://javarush.ru/groups/posts/2521-chastjh-3-protokolih-httphttps
все там прекрасно описано, мне даже понравилось, но к сожалению ничего нового там вычитать не удалось, все просто знакомо уже, и ни на грамм не продвинуло в сторону создания в С++ что то типа Get("https://www.cyberforum.ru") .

И что примечательно, вместо С++ постоянно приходится натыкаться на сноски то на Delphi, то на Java, то на С, и на дополнительные не установленные у меня библиотеки, не вошедшие в Embarcader и без которых похоже аж ничего не получится.

Цитата(SVN74 @  26.3.2021,  21:00 Найти цитируемый пост)
Возьмите запустите просто голый серверный сокет  на 80-м порту и сделайте с любого браузера запрос на этот сервер

а тут вообще предлагается сделать голый запрос из адресной строки любимого браузера на свой собственный сервер! На котором еще и демон запустить. И к которому обращаться с помощью javascript из html.

Но что в задаче спрашивается - сделать запрос на любой, в т.ч. не обязательно на свой собственный сайт, то ли http, а еще лучше https, и получить адекватный ответ которой можно либо напечатать на экране, либо сохранить в файл. И часть вторая - отправить на свой сервер для записи какой либо файл, в т.ч. бинарный, не только текстовый. 

Даже Perl с подобной задачей справляется на ура, а что же С++ ?

Автор: SVN74 27.3.2021, 00:32
Цитата(YahоО @  26.3.2021,  23:00 Найти цитируемый пост)
Но что в задаче спрашивается

Я для примера вам предложил создать свой серверный сокет (без демона) чисто чтобы понять как идет общение, конечно можно просто клиентским сокетом отправить GET запрос на любой сервер и вы получите необходимые вам данные...
HTTPS в "домашних" условиях поднять не получится .  smile 
--------------
Хотите знать кухню изнутри, - лучший способ "прощупать все руками"  

Автор: YahоО 27.3.2021, 00:45
Цитата(SVN74 @  27.3.2021,  00:32 Найти цитируемый пост)
можно просто клиентским сокетом отправить GET запрос на любой сервер и вы получите необходимые 

а как это?

(только не говорите про браузер)

------------------
HTTPS в "домашних" условиях поднять - неа, не нужно это, достаточно того что есть готовые - https://www.google.com и https://forum.vingrad.ru и к ним бы запрос на простом клиентском ...

Автор: SVN74 27.3.2021, 00:53
TCP/IP вам понадобится. Можно воспользоваться в с++ бюлдере одинм из двух вариантов взять стандартный доступ к сокетам или использовать winsok (если вы в Винде) .
Я бы рекомендовал использовать winsock. Хотя и в линуксе тот же подход к сокетам. 
Вот первый попавшийся пример в инете: https://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancedcode1d.html
на с++ бюлдере этот код должен тоже будет заработать


Автор: YahоО 27.3.2021, 12:52
SVN74, это первый "скрипт" который хотя бы запустился в моей Винде и бюлдере, т.е. значит скомпилировался и приступил к выполнению, и уже в ходе выполнения естественно выбросил внутреннюю ошибку с кодом 10061, потому что в адресе 127.0.0.1 не нашел отклика - там же ничего нету для ответа. 
Попробовал "натравить" эту штуку на гугл - обозначилась ошибка 10049, и даже если найти сайт с http и указать его ip то все равно ошибка 10061. Значит он работает хотя что то ему не нравится smile
Одно то что уже какой то просвет появился и показал что С++ на что то способен окромя Animal - > Dog and Kotik speak Myu or Gav уже обнадеживает и вдохновляет на подвиги в изучении этого мерзкого ооп в его "классике" и всей красе.

Автор: SVN74 27.3.2021, 22:41
Цитата(YahоО @  27.3.2021,  12:52 Найти цитируемый пост)
потому что в адресе 127.0.0.1 не нашел отклика

это внутренний адрес, а вам надо к примеру google - надо вводить не url а ip сайта (и только HTTP сайты )
И даже после всех танцев с бубном этот пример не получит с сайта ничего, чтобы к вам пришел ответ, надо послать серверу (сразу после соединения ) запрос GET и только после этого придет ответ

Я вам дал просто пример работы с сокетами на C++, там есть отсылка пакетов но нет приема, надо самому дописывать...
Если для вас это сложно, рекомендую использовать Java , - там все заточено для работы в сети.  

Если же вы все таки хотите использовать C++Builder, посмотрите эти ссылки, это тоже голые сокеты в обвертке... -  https://habr.com/ru/post/259641/
 https://habr.com/ru/post/259655/


http://docwiki.embarcadero.com/RADStudio/Sydney/en/Using_an_HTTP_Client

Автор: YahоО 28.3.2021, 13:00
Отчего так сложно в С++ написать или просто найти решение имеющейся задачи? 
Оказывается причина кроется в том что С++ рекомендует и практикует разделение любой программы на части и помещать используемые ею функции в отдельные файлы. 
Для этого предоставлена директива #include. И вместо того чтобы помещать объявления структур в каждый файл, их размещают в заголовочном файле, а затем включают в каждый файл кода. 
В итоге программы разбиваются на три части:
• заголовочный файл, содержащий объявления структур и прототипы функций, которые используют эти структуры;
• файл исходного кода, содержащий код функций, которые работают со структурами;
• файл исходного кода, содержащий код, который вызывает функции работы со структурами.
Когда имя файла представлено в двойных кавычках, компилятор сначала ищет файл в текущем рабочем каталоге или в каталоге с исходным кодом (либо в другом аналогичном месте, которое зависит от версии компилятора). 
Не обнаружив заголовочный файл там, он ищет его в стандартном местоположении.
На то он и компилятор, и пусть себе ищет. А если иерархия директорий имеет сбой, или версия то ли файла то ли компилятора не подходит, или требующийся в создаваемой программе файл элементарно отсутствует, то чтобы докопаться до причины сбоя потребуется дотошный досмотр всех цепочек. 
Именно поэтому никто на форуме не может представить единую программу интересующей задачи. Ведь решение то конечно есть, в том сомненья нету, но вся эта кодировщина раскидана по множественным папкам и файлам, и их количество измеряется должно быть баааальшой цифрой, 
и собирать и соединять все в одном никто в здравом уме и не подумает. Да впрочем и никто и никогда и даже для себя лично ничего подобного не делает, тем более ожидать развернутого ответа на форуме по данному вопросу ожидать не приходится.
Вот и получается что яваскрипт в свою очередь в значительном отрыве от  С++, в том что с помощью closure-compiler или просто ручками можно весьма ощутимо сократить объем написанного кода и даже только этим облегчить его восприятие за счет удаления "полезных" комментариев, избыточных пробелов, с заменой длинных имен односимвольными. 
И самый главный плюс яваскрипт в том что он как на ладони, не скрывается иерархиями директорий и соответствиями версий и библиотек с многотысячными файлами находящихся не в программе, а где то там, далеко в path и в папках, просто необъятного количества файликов содержащих ссылки на ссылки да заголовки со множественными мусорными комментариями. 
Учебники же для яваскрипт начала века действительны и применимы и по сей день. Так что свои плюсы у яваскрипт есть!
А задачку решить все же можно в С++, но предварительно нужно инсталлировать одну из библиотек, например Qt, для чего естественно нужно ежемесячно платить от $255, и загрузить более 3ГБ, распаковать эту громадину, 
изучить еще и ее, и тогда, может быть, решение материализуется. А еще параллельно начитаться С, Delphi, Object Pascal, Turbo Pascal, Java и т.п., 
перешерстить массу книжек различных авторов различных годов издания о различных версиях в т.ч. и устаревших и не поддерживающихся для различных и разнообразный вариаций компиляторов, отделить зерна от плевел, вникнуть во все обертки, 
это ж сколько надо иметь энтузиазма, денег и времени для того чтобы наконец то увидеть как С++ контактирует с интернетом? Конечно все это интересно, но не до такой же степени!
SVN74, благодарю за терпение и дачу разъяснений. Конечно вызывает уважение тот кто нашел в себе силы пройти весь этот тернистый путь и замусорил свой мозг обертками, версиями, заголовками и ссылками по коридорам директорий и инсталляций, и остался еще способен на написание чего либо интересного и не очень абстрактного.
После того что удалось почитать в разных источниках по сокетам восторг от того что Embarcadero может компилировать буковки в исполняемый код растворяется как дым. Мне тут посоветовали оторваться от яваскрипта - да ни за что!  smile))))))))))

Автор: SVN74 28.3.2021, 16:04
Если вы хотите писать для интернета, - С++ для этого подходит меньше всего. Чем ниже уровень ЯП , тем больше писанины, выше скорость, ошибки и привязка к железу более критичнее...  smile



Автор: YahоО 28.3.2021, 16:54
 ошибки и привязка к железу более критичнее... - кажется я с этим уже столкнулся, брандмауэр Защитника Windows заблокировал мое творчество 
по рецепту  https://docs.microsoft.com/en-us/windows/win32/winsock/creating-a-socket-for-the-server
Вот раздумываю разрешать разблокировку или повременить, несмотря на то что "скрипт" от microsoft.

Наверно это означает что я на правильном пути, если то что скомпилировалось уже представляет для меня же типа угрозу, настолько все реально! Сааавсем круто С++ ! 

Автор: SVN74 28.3.2021, 22:24
 smile Это срабатывает если запустить серверный сокет, на клиентский сокет он не реагирует...
Это защита от "шпиона", поэтому шпионы используют только клиентский сокет.  smile 

Автор: YahоО 29.3.2021, 12:03
Как то подозрительно все это, брандмауэр должен был бы реагировать на шпиЁна в виде клиента который пытается с пк что то секретное передать резиденту,
а тут получается что server на пк якобы поселился и сам становится резидентом слушающим сторонних шпиЁнов.

"Это защита от "шпиона", поэтому шпионы используют только клиентский сокет" - вот на них, на клиентов и должна реагировать система, по идее, а так получается что в системе уже сидит свой шпион, и не допускает иных резидентов, при этом система не против того чтобы множественные шпионы атаковали пк. На клиентов - шпионов брандмауэр не реагирует, подозрительный абсурд. Как только "въеду" в С++ надо будет поплотнее поинтересоваться устройством окон )) хотя ожидать этого по всем признакам придется очень не скоро.

Наверно из за потенциальных шпионов так сложно докопаться до кода позволяющего пк легко контактировать с интернетом.

И естественно, пользуясь случаем когда не потеряна нить разговора, попытаюсь спросить - вот есть сокеты, с помощью сокет-сервера слушают входящие, а с помощью клиента входят в контакт с серверами, но ведь это чепуха какая то!
Потому что имея на пк самодельный клиент невозможно контактировать с каким либо сайтом не имеющим никаких сокетов! И как тогда контактировать с сайтами?
Предположим тот код что от майкрософт-клиент я скомпилирую, но этот клиент никак с сайтом майкрософта не сможет контактировать потому что  там http+s но никак не ws://

(конечно же я помню Ломоносова - "Нет такого невежды, который не мог бы задать больше вопросов, чем может их разрешить самый знающий человек")

Автор: YahоО 29.3.2021, 12:57
Мощный и быстрый C++ специально не умеет просто и быстро сделать то что умеет пхп в одну строку:
Код

<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>

https://www.php.net/manual/ru/function.file-get-contents.php

Автор: YahоО 31.3.2021, 13:47
Romikgy,  YahоО, вам не СЛАБО ... значит катайтесь на коньках. 
Чуть менее недели минуло, и что, ну нашел я то что искал, три-четыре дня утеряно потрачено на чтение умных книжек, и периодический поиск file_get_contents, и наконец то заработало, скачивает с интернета страницу, то что я и спрашивал, и то в чем Вы мне отказали в помощи. 
Самоделкины, на помощь от Romikgy не надейтесь! Долбите сами гранит науки smile)) это на поверку оказывается самый верный путь! 
Если конечно вам не СЛАБО.

Плохо конечно что на форуме отсутствуют раздел с правильными классическими примерами того или иного яп, ссылаясь на которые можно было бы что то оперативно и без потерь времени уточнить, освежить, познакомиться, изучить, и не задавать наивные вопросы, и уже на их основе творить свои пробы.
Есть много источников, например хабр, но там все новое, а где правильное и до настоящего времени актуальное и работающее находить, основы может быть, отправные точки?
Оригинальный совет всем кататься на коньках не украшает форум, скорее напоминает о снобизме вездесущих завсегдатаев.


Автор: YahоО 13.4.2021, 19:18
Цитата(Romikgy @  25.3.2021,  18:31 Найти цитируемый пост)
2. такие вещи не делаются из консольных приложений 


А если попробовать?
Код

#include <cstdlib>
int main(){
   system("curl https://github.com/ -o o.htm");
   return 0;
}

Работает? Работает!
И представьте себе это настолько короткий код, что просто диву даешься отчего никто вот так просто не написал его ни в одном примере. 

Но тут же новый вопрос, который наверно лучше написать в новой теме, но пробую спросить здесь:
Скачал curlpp-0.8.1.zip, и совершенно не представляю что с ним нужно сделать, чтобы в с++ можно было написать строку:
#include <curlpp/cURLpp.hpp>
и компилятор нашел бы curlpp в стандартном include. Может надо скопировать папку с  curlpp-0.8.1\include\   в папку c:\Program Files (x86)\Embarcadero\Studio\20.0\include\ но оказывается тут требуются какие то права - "С админ.правами",
или нужен какой то дополнительный инсталлятор папки в мамку, весь гугл протер до дыр можно сказать smile

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