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

VerBin

Client
Регистрация
28.05.2016
Сообщения
556
Реакции
461
Баллы
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/

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

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

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

Вложения

  • curl.rar
    curl.rar
    836,8 KB · Просмотры: 2 502
Последнее редактирование:
Так вроде бы стандартные экшены пост/гет запросов итак по сути через курл идут, нет?
 
Лучше бы про xnet рассказал.
Могу расписать как его, так и еще парочку других библиотек для работы с HTTP, только для их использования нужны хоть какието навыки кодинга.
Что касается CURL, он гораздо проще для людей без таковых знаний.
 
Странно, странно) Вроде тут везде пишут, что в webrequest нет поддержки проксей socks5, и что в зенно через библиотеку libcurl вся работа строится
Да перепутал с другим софтом.
 
я еще почему так подумал, потому что в курл, прокси с авторизацией записываются так же, как и в зенке login:pass@ip:port, или может везде так)
 
  • Спасибо
Реакции: ZSharp
Странно, странно) Вроде тут везде пишут, что в webrequest нет поддержки проксей socks5, и что в зенно через библиотеку libcurl вся работа строится
В WebRequest нет поддержки socks, но есть поддержка http проксей.
При желании можно написать код для поддержки, либо найти готовые решения.

я еще почему так подумал, потому что в курл, прокси с авторизацией записываются так же, как и в зенке login:pass@ip:port, или может везде так)
Это стандарт URI
 
  • Спасибо
Реакции: Лев
Делал бенчмарки на разные методы запросов?
Кто быстрее на большом количестве потоков?
Без сомнения запросы на чистом C# быстрее, поскольку запуск CURL подразумевает запуск отдельного процесса.
Хотя если не использовать готовые классы типа WebRequest, а реализовать на чистых сокетах это в разы будет быстрее, но требует больше времени в реализации.
 
Последнее редактирование:
  • Спасибо
Реакции: alesk
Могу расписать как его, так и еще парочку других библиотек для работы с HTTP, только для их использования нужны хоть какието навыки кодинга.
Что касается CURL, он гораздо проще для людей без таковых знаний.
О с удовольствием прочитал бы... =) Вы очень хорошие инструменты описываете, еще бы примеры вашего использования, вообще бы радость была.
 
  • Спасибо
Реакции: VerBin
Странно, странно) Вроде тут везде пишут, что в webrequest нет поддержки проксей socks5, и что в зенно через библиотеку libcurl вся работа строится
Так внедрить поддержку соксов - это не ядерную физику изучить. В инете есть парочка почти готовых решений, остается только посмотреть их, немного исправить и внедрить.
P.S. сомневаюсь, что в зенно работа строится через libcurl
 
Всё супер, но в винде если вы много параметров нахерачите будет...
имя файла или его расширение имеет слишком большую длину
 
К стате сейчас вот поковырял он оттуда (из файла) берет почемуто только один параметр :(
Баг или фишка я хз :(
Только что проверил.
Все команды обрабатывает.
 
Только что проверил.
Все команды обрабатывает.
Давно хотел кусок одного кода переписать у себя никак руки не доходили...
Кладу в файл
-F "test1=test1" -F "test2=test2" -F "test3=test3"
Пол дня потерял ) уходит только первый... через фидлер гонял... проверь у себя к стате, я даже несколько версий скачал такая же ерундень...
Не через файл уходят все...
 
Давно хотел кусок одного кода переписать у себя никак руки не доходили...
Кладу в файл
-F "test1=test1" -F "test2=test2" -F "test3=test3"
Пол дня потерял ) уходит только первый... через фидлер гонял... проверь у себя к стате, я даже несколько версий скачал такая же ерундень...
Не через файл уходят все...
Каждый параметр должен быть на отдельной строке в файле
Код:
Развернуть Свернуть Копировать
-F "test1=test1"
-F "test2=test2"
-F "test3=test3"
 
  • Спасибо
Реакции: Gfoblin
Каждый параметр должен быть на отдельной строке в файле
Код:
Развернуть Свернуть Копировать
-F "test1=test1"
-F "test2=test2"
-F "test3=test3"
Во чего не знал того не знал :az:
Работает!
P.S. Тоже наверх добавь плз.
 
А в зенке же есть кубик Запуск программы, можно ведь по идеи и без C# обойтись, если запускать curl.exe
Кстати а куки потом будут подтягиваться для обычного кубика "Переход на страницу"?
 
А в зенке же есть кубик Запуск программы, можно ведь по идеи и без C# обойтись, если запускать curl.exe
Да можно воспользоваться обычным кубиком запуска программы, но при этот в CURL необходимо указывать параметр --output или его сокращенный вариант -o
Пример:
Код:
Развернуть Свернуть Копировать
curl http://example.com --output "result.txt"
Этот параметр необходим для того, чтобы результат записывался в файл.
Стандартнй кубик не возвращает текстовый результат в переменную, а только код выполнения.
Кстати а куки потом будут подтягиваться для обычного кубика "Переход на страницу"?
Что касается cookies, то в curl они имеют свой определенный формат, файл можно открыть тектовым редактором и посмотреть на содержимое.
Куки при действии "Переход на страницу" подтягиватся не будут. Нужно их взять из файла и установить в инстансе, если будет необходимость.
 

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