Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: GET request through curl  (Прочитано 1183 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Peter_I

  • Автор темы
  • Старожил
  • *
  • Сообщений: 3037
    • Просмотр профиля
GET request through curl
« : 24 Января 2018, 20:35:31 »
Здравствуйте!

У меня возникла надобность послать на веб-камеру GЕТ-запрос из командной строки,
это надо делать через curl или есть ещё что-нибудь?
И можно ли где-нибудь увидеть пример, т.к. я ещё никогда ею не пользовался, а в "man curl" довoльно много опций?
Хотя некоторые подходящие вроде бы нашёл.
« Последнее редактирование: 24 Января 2018, 22:23:00 от Peter_I »
Пётр.

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3487
  • Ubuntu 22.04 х64
    • Просмотр профиля
Re: GET request through curl
« Ответ #1 : 24 Января 2018, 21:55:56 »
Peter_I, можно через wget
Код: (bash) [Выделить]
wget 'http://<adress>/<command>?<name>=<value>' -O- | cat
HP Pro 840 G3: Intel i5-6300U, 32GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04
Dell Latitude 5590: Intel i5-8350U, 16GB DDR4 2400MHz, Intel 620, Samsung 1TB/Ubuntu 22.04

Оффлайн Peter_I

  • Автор темы
  • Старожил
  • *
  • Сообщений: 3037
    • Просмотр профиля
Re: GET request through curl
« Ответ #2 : 24 Января 2018, 22:34:53 »
Так мне же послать, а не получить.
Я сейчас посмотрел "man wget" и не нашёл там подобного.
Пётр.

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3487
  • Ubuntu 22.04 х64
    • Просмотр профиля
Re: GET request through curl
« Ответ #3 : 24 Января 2018, 23:04:59 »
Peter_I, Как это? GET запрос - это обычный "URL" с параметрами, которые вы можете вставлять в строку браузера
Пример GET запроса даже вот этот линк.
Если расшифровать то что написал я в коде в первом посте:
Сделать запрос на url http://<adress>/<command> c GET параметром <name>, значение которого <value>. <adress> - это урл\или IP куда слать, <command> - команда или страница.
На примере урла, этой темы:
Послать запрос на https://forum.ubuntu.ru, где командаґстраница index.php с параметром topic, что равен 295689.msg2324025
Параметр -O для wget указывает куда перенаправить вывод, по умолчанию в файл. -O <file name>, -O- - перенаправить вывод в stdout, ну и через пайп - и cat - выводим результат на экран без сохранения в файл.
Для post запроса будет так
Код: (bash) [Выделить]
wget 'http://<adress>/<command>' --post-data '<name1>=<value1>&<name2>=<value2>' -O- | cat
HP Pro 840 G3: Intel i5-6300U, 32GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04
Dell Latitude 5590: Intel i5-8350U, 16GB DDR4 2400MHz, Intel 620, Samsung 1TB/Ubuntu 22.04

Оффлайн Peter_I

  • Автор темы
  • Старожил
  • *
  • Сообщений: 3037
    • Просмотр профиля
Re: GET request through curl
« Ответ #4 : 24 Января 2018, 23:51:18 »
EvangelionDeath, Благодарю за подробное разъяснение и ссылки, обязательно посмотрю,
а мне надо сделать из командной строки то, что в некоей программе на Qt делается вызовом функции QTcpSocket write(),
именно посылается в веб-камеру с ip-адресом запрос GET, где в запросе после GET через пробел идёт команда.
Ещё это можно сделать, набрав её адрес и эту команду в адресной строке браузера.

Пользователь добавил сообщение 24 Января 2018, 23:57:35:
EvangelionDeath, Вообще wget я иногда пользуюсь и всегда с опцией "-O", но мне показалось, что это 0.
Что так вывод перенаправляется в stdout, я понимаю, но мне-то вывод не нужен, мне надо только послать команду.
« Последнее редактирование: 24 Января 2018, 23:57:35 от Peter_I »
Пётр.

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3487
  • Ubuntu 22.04 х64
    • Просмотр профиля
Re: GET request through curl
« Ответ #5 : 25 Января 2018, 00:09:04 »
Peter_I, ну так да. Для wget и пишите именно то, что втавляете в адресную строку и точно так же, как вставляете. К сожалению с синтаксисом QT хоть и знаком, но увы, с командами и библиотеками там - у меня плохо. Думаю, что можно обойтись и возможностями самого Qt
Код: (cpp) [Выделить]
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(requestReceived(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("<your/path/for/get/request>")));
HP Pro 840 G3: Intel i5-6300U, 32GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04
Dell Latitude 5590: Intel i5-8350U, 16GB DDR4 2400MHz, Intel 620, Samsung 1TB/Ubuntu 22.04

Оффлайн Peter_I

  • Автор темы
  • Старожил
  • *
  • Сообщений: 3037
    • Просмотр профиля
Re: GET request through curl
« Ответ #6 : 25 Января 2018, 13:54:29 »
EvangelionDeath, С помощью curl удалось послать команду камере, когда правильно сформировал запрос:
curl -v -G -d "name1=value1&...nameN=valueN" http://<ip>/mjpegно она делает не то, что мне требовалось: она устанавливает новое соединение и камера начинает посылать в него кадры,
а мне хотелось изменить параметр потока уже существующего соединение, по которому камера уже посылает кадры программе.
Так работает сервер в этой камере.

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

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3487
  • Ubuntu 22.04 х64
    • Просмотр профиля
Re: GET request through curl
« Ответ #7 : 25 Января 2018, 14:20:34 »
Peter_I, эм. Для этого надо еще запихнуть туда все параметры сессии (куки), что бы камера думала, что инфу ей передали с другого места. И то, если камера не сверяет "клиента". Если же существует виндовое ПО, что разрешает менять параметры других сессий, тогда наверное стоит все же найти все спецификации (то есть документацию) по апи самой камеры.
HP Pro 840 G3: Intel i5-6300U, 32GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04
Dell Latitude 5590: Intel i5-8350U, 16GB DDR4 2400MHz, Intel 620, Samsung 1TB/Ubuntu 22.04

 

Страница сгенерирована за 0.048 секунд. Запросов: 25.