CURL - Отличная альтернатива для выполнения запросов GET/POST

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
456
Баллы
63
Встроенные кубики ZennoPoster для выполнения запросов GET/POST не настолько настраиваемые как может быть необходимо пользователю.
Многие решают специфические задачи при помощи C# кода.
Предлагаемое мной решение гораздо проще для людей, не знакомых с программированием, а также является более гибким.

cURL - очень мощная консольная программа для выполнения запросов к удаленным серверам.

Описание программы:
https://ru.wikipedia.org/wiki/CURL

Для того чтобы протестировать запрос нам необходимо:

1) Открыть режим командной строки
2) Ввести необходимую комманду
3) Получить результат
4) Вставить параметры команды в переменную ARGUMENTS в шаблоне.

Для работы с CURL я написал сниппет на C#, который запускает CURL с заданными аргументами в скрытом режиме и возвращает результат.

curl.png


В каталог с проектом необходимо поместить 2 файла:
curl.exe - сама программа
curl-ca-bundle.crt - сертификат для работы с протоколом https

Сниппет берет параметры для запуска из переменной ARGUMENTS
Возвращает результат в переменную RESULT
Если произойдет ошибка, код сгенерирует исключение, в этом случае можно будет выйти по красной линии из кубика.

При тестировании в режиме командной строки необходимо перед командой вводить имя программы. Пример:
Код:
curl --include --location http://test.com
При использовании в проекте, в переменную ARGUMENTS нужно лишь положить сами аргументы. Пример:
Код:
--include --location http://test.com
Разберем парочку составленых комманд специально для ZennoPoster на отдельные части:
Код:
--include --location --proxy "{-Variables.PROXY-}" --user-agent "{-Profile.UserAgent-}" --cookie "{-Project.Directory-}cookies\{-Profile.NickName-}" --cookie-jar "{-Project.Directory-}cookies\{-Profile.NickName-}" http://test.com?aaa=111&bbb=222
Все параметры, кроме самого url являются не обязательными

Выполняет GET запрос на http://test.com?aaa=111&bbb=222

--include
Выводить в результат заголовки ответа от сервера

--location
Следовать перенаправлениями, если сервер вернул заголовок Location

--proxy "{-Variables.PROXY-}"
Установить прокси из переменной. В переменную предаварительно необходимо положить текущий прокси проекта.
Параметр понимает как Http так и Socks прокси.

--user-agent "{-Profile.UserAgent-}"
Устанавливает UserAgent из текущего проекта

--cookie "{-Project.Directory-}cookies\{-Profile.NickName-}"
--cookie-jar "{-Project.Directory-}cookies\{-Profile.NickName-}"
Два параметра отвечают за обработку cookies. При получении cookies от сервера создают файл в каталоге cookies текущего проекта, и назначают ему имя взятое из профиля.
Тут в качестве имени файла можно либо заранее использовать сгенерированный ID, либо любое другое значение.
При последующих запросах кукисы удачно отправляются, если указанные файлы уже существуют.


Для того, чтобы выполнить POST запрос, достаточно добавить параметр:
--data "aaa=123&bbb=test"

CURL также позволяет брать команды из файла
https://ec.haxx.se/cmdline-configfile.html
Пример:
Код:
curl -K cmdline.txt http://example.com
В файле cmdline.txt каждый параметр должен быть указан с новой строки:


Код:
-F "test1=test1"
-F "test2=test2"
-F "test3=test3"


Для более детального изучения возможностей рекомендую ознакомится:
http://osxh.ru/terminal/command/curl
https://curl.haxx.se/docs/httpscripting.html
https://andreyex.ru/operacionnaya-sistema-linux/5-osnovnyx-primerov-komandy-curl/

Это крайне полезная штука. Рекомендую детальнее расмотреть все возможности данной утилиты.

Буду рад ответить на интересующие вас вопросы по данному материалу, так и в целом по технической части реализации.

 
Тема статьи
Другое
Номер конкурса статей
Шестой конкурс статей

Вложения

  • 836,8 КБ Просмотры: 1 862

Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Последнее редактирование:

AloneSlamer

Client
Регистрация
29.01.2013
Сообщения
1 404
Благодарностей
362
Баллы
83

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с AloneSlamer какие-либо сделки.

Лучше бы про xnet рассказал.
 
  • Спасибо
Реакции: DenisK

Porosenok

Client
Регистрация
26.09.2010
Сообщения
1 280
Благодарностей
96
Баллы
48
Так вроде бы стандартные экшены пост/гет запросов итак по сути через курл идут, нет?
 

AloneSlamer

Client
Регистрация
29.01.2013
Сообщения
1 404
Благодарностей
362
Баллы
83

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с AloneSlamer какие-либо сделки.

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
456
Баллы
63
Лучше бы про xnet рассказал.
Могу расписать как его, так и еще парочку других библиотек для работы с HTTP, только для их использования нужны хоть какието навыки кодинга.
Что касается CURL, он гораздо проще для людей без таковых знаний.
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
456
Баллы
63

Лев

Client
Регистрация
09.12.2014
Сообщения
290
Благодарностей
273
Баллы
63

AloneSlamer

Client
Регистрация
29.01.2013
Сообщения
1 404
Благодарностей
362
Баллы
83

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с AloneSlamer какие-либо сделки.

Странно, странно) Вроде тут везде пишут, что в webrequest нет поддержки проксей socks5, и что в зенно через библиотеку libcurl вся работа строится
Да перепутал с другим софтом.
 

Лев

Client
Регистрация
09.12.2014
Сообщения
290
Благодарностей
273
Баллы
63
я еще почему так подумал, потому что в курл, прокси с авторизацией записываются так же, как и в зенке login:pass@ip:port, или может везде так)
 
  • Спасибо
Реакции: ZSharp

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
456
Баллы
63
Странно, странно) Вроде тут везде пишут, что в webrequest нет поддержки проксей socks5, и что в зенно через библиотеку libcurl вся работа строится
В WebRequest нет поддержки socks, но есть поддержка http проксей.
При желании можно написать код для поддержки, либо найти готовые решения.

я еще почему так подумал, потому что в курл, прокси с авторизацией записываются так же, как и в зенке login:pass@ip:port, или может везде так)
Это стандарт URI
 
  • Спасибо
Реакции: Лев

alesk

Client
Регистрация
12.12.2014
Сообщения
1
Благодарностей
0
Баллы
1

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
456
Баллы
63
Делал бенчмарки на разные методы запросов?
Кто быстрее на большом количестве потоков?
Без сомнения запросы на чистом C# быстрее, поскольку запуск CURL подразумевает запуск отдельного процесса.
Хотя если не использовать готовые классы типа WebRequest, а реализовать на чистых сокетах это в разы будет быстрее, но требует больше времени в реализации.
 
Последнее редактирование:
  • Спасибо
Реакции: alesk

Semyon

Client
Регистрация
19.09.2016
Сообщения
43
Благодарностей
36
Баллы
18
Могу расписать как его, так и еще парочку других библиотек для работы с HTTP, только для их использования нужны хоть какието навыки кодинга.
Что касается CURL, он гораздо проще для людей без таковых знаний.
О с удовольствием прочитал бы... =) Вы очень хорошие инструменты описываете, еще бы примеры вашего использования, вообще бы радость была.
 
  • Спасибо
Реакции: VerBin

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Странно, странно) Вроде тут везде пишут, что в webrequest нет поддержки проксей socks5, и что в зенно через библиотеку libcurl вся работа строится
Так внедрить поддержку соксов - это не ядерную физику изучить. В инете есть парочка почти готовых решений, остается только посмотреть их, немного исправить и внедрить.
P.S. сомневаюсь, что в зенно работа строится через libcurl
 

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 591
Благодарностей
1 014
Баллы
113
Всё супер, но в винде если вы много параметров нахерачите будет...
имя файла или его расширение имеет слишком большую длину
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
456
Баллы
63

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 591
Благодарностей
1 014
Баллы
113

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
456
Баллы
63

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 591
Благодарностей
1 014
Баллы
113

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
456
Баллы
63

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 591
Благодарностей
1 014
Баллы
113
Только что проверил.
Все команды обрабатывает.
Давно хотел кусок одного кода переписать у себя никак руки не доходили...
Кладу в файл
-F "test1=test1" -F "test2=test2" -F "test3=test3"
Пол дня потерял ) уходит только первый... через фидлер гонял... проверь у себя к стате, я даже несколько версий скачал такая же ерундень...
Не через файл уходят все...
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
456
Баллы
63
Давно хотел кусок одного кода переписать у себя никак руки не доходили...
Кладу в файл
-F "test1=test1" -F "test2=test2" -F "test3=test3"
Пол дня потерял ) уходит только первый... через фидлер гонял... проверь у себя к стате, я даже несколько версий скачал такая же ерундень...
Не через файл уходят все...
Каждый параметр должен быть на отдельной строке в файле
Код:
-F "test1=test1"
-F "test2=test2"
-F "test3=test3"
 
  • Спасибо
Реакции: Gfoblin

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 591
Благодарностей
1 014
Баллы
113
Каждый параметр должен быть на отдельной строке в файле
Код:
-F "test1=test1"
-F "test2=test2"
-F "test3=test3"
Во чего не знал того не знал :az:
Работает!
P.S. Тоже наверх добавь плз.
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
456
Баллы
63

AZANIR

Client
Регистрация
09.06.2014
Сообщения
405
Благодарностей
198
Баллы
43

AloneSlamer

Client
Регистрация
29.01.2013
Сообщения
1 404
Благодарностей
362
Баллы
83

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с AloneSlamer какие-либо сделки.

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
456
Баллы
63

zennopro

Client
Регистрация
25.07.2016
Сообщения
9
Благодарностей
1
Баллы
3
А в зенке же есть кубик Запуск программы, можно ведь по идеи и без C# обойтись, если запускать curl.exe
Кстати а куки потом будут подтягиваться для обычного кубика "Переход на страницу"?
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
456
Баллы
63
А в зенке же есть кубик Запуск программы, можно ведь по идеи и без C# обойтись, если запускать curl.exe
Да можно воспользоваться обычным кубиком запуска программы, но при этот в CURL необходимо указывать параметр --output или его сокращенный вариант -o
Пример:
Код:
curl http://example.com --output "result.txt"
Этот параметр необходим для того, чтобы результат записывался в файл.
Стандартнй кубик не возвращает текстовый результат в переменную, а только код выполнения.
Кстати а куки потом будут подтягиваться для обычного кубика "Переход на страницу"?
Что касается cookies, то в curl они имеют свой определенный формат, файл можно открыть тектовым редактором и посмотреть на содержимое.
Куки при действии "Переход на страницу" подтягиватся не будут. Нужно их взять из файла и установить в инстансе, если будет необходимость.
 

EccoArts

Client
Регистрация
07.04.2016
Сообщения
23
Благодарностей
9
Баллы
3
  • Спасибо
Реакции: lupo и Vital

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)