5 основных примеров команды curl

Как пользоваться curl?

Мы рассмотрели все, что касается теории работы с утилитой curl, теперь пришло время перейти к практике, и рассмотреть примеры команды curl.

Загрузка файлов

Самая частая задача – это загрузка файлов linux. Скачать файл очень просто. Для этого достаточно передать утилите в параметрах имя файла или html страницы:

curl https://raw.githubusercontent.com/curl/curl/master/README.md

Но тут вас ждет одна неожиданность, все содержимое файла будет отправлено на стандартный вывод. Чтобы записать его в какой-либо файл используйте:

curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md

А если вы хотите, чтобы полученный файл назывался так же, как и файл на сервере, используйте опцию -O:

curl -O https://raw.githubusercontent.com/curl/curl/master/README.md

Если загрузка была неожиданно прервана, вы можете ее возобновить:

curl -# -C – -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz

Если нужно, одной командой можно скачать несколько файлов:

curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README

Еще одна вещь, которая может быть полезной администратору – это загрузка файла, только если он был изменен:

curl -z 21-Dec-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README

Данная команда скачает файл, только если он был изменен после 21 декабря 2017.

Ограничение скорости

Вы можете ограничить скорость загрузки до необходимого предела, чтобы не перегружать сеть с помощью опции -Y:

curl –limit-rate 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz

Здесь нужно указать количество килобайт в секунду, которые можно загружать. Также вы можете разорвать соединение если скорости недостаточно, для этого используйте опцию -Y:

curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md

Передача файлов

Загрузка файлов, это достаточно просто, но утилита позволяет выполнять и другие действия, например, отправку файлов на ftp сервер. Для этого существует опция -T:

curl -T login.txt ftp://speedtest.tele2.net/upload/

Или проверим отправку файла по HTTP, для этого существует специальный сервис:

curl -T ~/login.txt http://posttestserver.com/post.php

В ответе утилита сообщит где вы можете найти загруженный файл.

Отправка данных POST

Вы можете отправлять не только файлы, но и любые данные методом POST. Напомню, что этот метод используется для отправки данных различных форм. Для отправки такого запроса используйте опцию -d. Для тестирования будем пользоваться тем же сервисом:

curl -d “field1=val&fileld2=val1″http://posttestserver.com/post.php

Если вас не устраивает такой вариант отправки, вы можете сделать вид, что отправили форму. Для этого есть опция -F:

curl -F “password=@pass;type=text/plain” http://posttestserver.com/post.php

Здесь мы передаем формой поле password, с типом обычный текст, точно так же вы можете передать несколько параметров.

Передача и прием куки

Куки или Cookie используются сайтами для хранения некой информации на стороне пользователя. Это может быть необходимо, например, для аутентификации. Вы можете принимать и передавать Cookie с помощью curl. Чтобы сохранить полученные Cookie в файл используйте опцию -c:

curl -c cookie.txt http://posttestserver.com/post.php

Затем можно отправить cookie curl обратно:

curl -b cookie.txt http://posttestserver.com/post.php

Передача и анализ заголовков

Не всегда нам обязательно нужно содержимое страницы. Иногда могут быть интересны только заголовки. Чтобы вывести только их есть опция -I:

curl -I https://losst.ru

А опция -H позволяет отправить нужный заголовок или несколько на сервер, например, можно передать заголовок If-Modified-Since чтобы страница возвращалась только если она была изменена:

curl -I –хедер ‘If-Modified-Since: Mon, 26 Dec 2016 18:13:12 GMT’ https://losst.ru

Аутентификация curl

Если на сервере требуется аутентификация одного из распространенных типов, например, HTTP Basic или FTP, то curl очень просто может справиться с такой задачей. Для указания данных аутентификации просто укажите их через двоеточие в опции -u:

curl -u ftpuser:ftppass -T – ftp://ftp.testserver.com/myfile_1.txt

Точно так же будет выполняться аутентификация на серверах HTTP.

Использование прокси

Если вам нужно использовать прокси сервер для загрузки файлов, то это тоже очень просто. Достаточно задать адрес прокси сервера в опции -x:

curl -x proxysever.test.com:3128 http://google.co.in

85 Operating Systems

AIX, AmigaOS, Android, Aros, BeOS, Blackberry 10, Blackberry Tablet OS, Cell OS, ChromeOS, Cisco IOS, Cygwin, Dragonfly BSD, eCOS, FreeBSD, FreeDOS, FreeRTOS, Fuchsia, Garmin OS, Genode, Haiku, HardenedBSD, HP-UX, Hurd, Illumos, Integrity, iOS, ipadOS, IRIX, LineageOS, Linux, Lua RTOS, Mac OS 9, macOS, Mbed, Micrium, MINIX, MorphOS, MPE/iX, MS-DOS, NCR MP-RAS, NetBSD, Netware, Nintendo Switch, NonStop OS, NuttX, OpenBSD, OpenStep, Orbis OS, OS/2, OS/400, OS21, Plan 9, PlayStation Portable, QNX, Qubes OS, ReactOS, Redox, RICS OS, Sailfish OS, SCO Unix, Serenity, SINIX-Z, Solaris, SunOS, Syllable OS, Symbian, Tizen, TPF, Tru64, tvOS, ucLinux, Ultrix, UNICOS, UnixWare, VMS, vxWorks, WebOS, Wii system software, Windows, Windows CE, Xbox System, z/OS, z/TPF, z/VM, z/VSE

URL

The URL syntax is protocol-dependent. You’ll find a detailed description in RFC 3986.

You can specify multiple URLs or parts of URLs by writing part sets within braces and quoting the URL as in:

  «http://site.{one,two,three}.com»

or you can get sequences of alphanumeric series by using [] as in:

  «ftp://ftp.example.com/file.txt»

  «ftp://ftp.example.com/file.txt» (with leading zeros)

  «ftp://ftp.example.com/file.txt»

Nested sequences are not supported, but you can use several ones next to each other:

  «http://example.com/archive/vol/part{a,b,c}.html»

You can specify any amount of URLs on the command line. They will be fetched in a sequential manner in the specified order. You can specify command line options and URLs mixed and in any order on the command line.

You can specify a step counter for the ranges to get every Nth number or letter:

  «http://example.com/file.txt»

  «http://example.com/file.txt»

When using [] or {} sequences when invoked from a command line prompt, you probably have to put the full URL within double quotes to avoid the shell from interfering with it. This also goes for other characters treated special, like for example ‘&’, ‘?’ and ‘*’.

Provide the IPv6 zone index in the URL with an escaped percentage sign and the interface name. Like in

  «http:///»

If you specify URL without protocol:// prefix, curl will attempt to guess what protocol you might want. It will then default to HTTP but try other protocols based on often-used host name prefixes. For example, for host names starting with «ftp.» curl will assume you want to speak FTP.

curl will do its best to use what you pass to it as a URL. It is not trying to validate it as a syntactically correct URL by any means but is instead very liberal with what it accepts.

curl will attempt to re-use connections for multiple file transfers, so that getting many files from the same server will not do multiple connects / handshakes. This improves speed. Of course this is only done on files specified on a single command line and cannot be used between separate curl invocations.

Multithreading notes

By default, jobs in IBM i won’t start with threading enabled. (Exceptions
include interactive PASE sessions started by or SSH.) If you use
curl in an environment without threading when options like async DNS were
enabled, you’ll messages like:

Don’t panic! curl and your program aren’t broken. You can fix this by:

  • Set the environment variable to before starting
    your program. This can be done at whatever scope you feel is appropriate.
  • Alternatively, start the job with the parameter set to .

Cross compile

Download and unpack the curl package.

to the new directory. (e.g. )

Set environment variables to point to the cross-compile toolchain and call
configure with any options you need. Be sure and specify the and
parameters at configuration time. The following script is an
example of cross-compiling for the IBM 405GP PowerPC processor using the
toolchain from MonteVista for Hardhat Linux.

#! /bin/sh

export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin
export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include"
export AR=ppc_405-ar
export AS=ppc_405-as
export LD=ppc_405-ld
export RANLIB=ppc_405-ranlib
export CC=ppc_405-gcc
export NM=ppc_405-nm

./configure --target=powerpc-hardhat-linux
    --host=powerpc-hardhat-linux
    --build=i586-pc-linux-gnu
    --prefix=/opt/hardhat/devkit/ppc/405/target/usr/local
    --exec-prefix=/usr/local

You may also need to provide a parameter like to
configure as it cannot detect the presence of a random number generating
device for a target system. The parameter specifies where curl
will be installed. If completes successfully, do and as usual.

In some cases, you may be able to simplify the above commands to as little as:

REDUCING SIZE

There are a number of configure options that can be used to reduce the size of
libcurl for embedded applications where binary size is an important factor.
First, be sure to set the variable when configuring with any relevant
compiler optimization flags to reduce the size of the binary. For gcc, this
would mean at minimum the -Os option, and potentially the ,
and options as well, e.g.

Note that newer compilers often produce smaller code than older versions
due to improved optimization.

Be sure to specify as many and flags on the
configure command-line as you can to disable all the libcurl features that you
know your application is not going to need. Besides specifying the
flags for all the types of URLs your application will not
use, here are some other flags that can reduce the size of the library:

  • (disables support for the C-ARES DNS library)
  • (disables support for HTTP cookies)
  • (disables HTTP cryptographic authentication)
  • (disables support for IPv6)
  • (disables support for the built-in documentation)
  • (disables support for HTTP and SOCKS proxies)
  • (disables support for UNIX sockets)
  • (eliminates debugging strings and error code strings)
  • (disables support for versioned symbols)
  • (eliminates unneeded symbols in the shared library)
  • (disables support for the libidn DNS library)
  • (disables support for RTMP)
  • (disables support for SSL/TLS)
  • (disables support for on-the-fly decompression)

The GNU compiler and linker have a number of options that can reduce the
size of the libcurl dynamic libraries on some platforms even further.
Specify them by providing appropriate and variables on
the configure command-line, e.g.

Be sure also to strip debugging symbols from your binaries after compiling
using ‘strip’ (or the appropriate variant if cross-compiling). If space is
really tight, you may be able to remove some unneeded sections of the shared
library using the -R option to objcopy (e.g. the .comment section).

Using these techniques it is possible to create a basic HTTP-only shared
libcurl library for i386 Linux platforms that is only 113 KiB in size, and an
FTP-only library that is 113 KiB in size (as of libcurl version 7.50.3, using
gcc 5.4.0).

You may find that statically linking libcurl to your application will result
in a lower total size than dynamically linking.

Note that the curl test harness can detect the use of some, but not all, of
the statements suggested above. Use will cause tests relying on
those features to fail. The test harness can be manually forced to skip the
relevant tests by specifying certain key words on the command
line. Following is a list of appropriate key words:

  • !cookies
  • !—manual
  • !HTTP\ proxy !proxytunnel !SOCKS4 !SOCKS5

PORTS

This is a probably incomplete list of known CPU architectures and operating
systems that curl has been compiled for. If you know a system curl compiles
and runs on, that isn’t listed, please let us know!

Следовать за редиректами

Сервер Google сообщил нам, что страница перемещена (301 Moved Permanently), и теперь надо запрашивать страницу . С помощью опции укажем CURL следовать редиректам:

> curl -L google.com
<!doctype html>
<html itemscope="" itemtype="http://schema.org/WebPage" lang="ru">
<head>
<meta content="Поиск информации в интернете: веб страницы, картинки, видео и многое другое." name="description">
<meta content="noodp" name="robots">
<meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image">
<meta content="origin" name="referrer">
<title>Google</title>
..........

Disabling Specific Protocols in Windows builds

The configure utility, unfortunately, is not available for the Windows
environment, therefore, you cannot use the various disable-protocol options of
the configure utility on this platform.

You can use specific defines to disable specific protocols and features. See
CURL-DISABLE.md for the full list.

If you want to set any of these defines you have the following options:

  • Modify
  • Modify
  • Modify
  • Modify the «Preprocessor Definitions» in the libcurl project

Note: The pre-processor settings can be found using the Visual Studio IDE
under «Project -> Settings -> C/C++ -> General» in VC6 and «Project ->
Properties -> Configuration Properties -> C/C++ -> Preprocessor» in later
versions.

Speed Limit

Curl allows the user to set the transfer speed conditions that must be met to let the transfer keep going. By using the switch and you can make curl abort transfers if the transfer speed is below the specified lowest limit for a specified time.

To have curl abort the download if the speed is slower than 3000 bytes per second for 1 minute, run:

This can very well be used in combination with the overall time limit, so that the above operation must be completed in whole within 30 minutes:

Forcing curl not to transfer data faster than a given rate is also possible, which might be useful if you’re using a limited bandwidth connection and you don’t want your transfer to use all of it (sometimes referred to as «bandwidth throttle»).

Make curl transfer data no faster than 10 kilobytes per second:

or

Or prevent curl from uploading data faster than 1 megabyte per second:

When using the option, the transfer rate is regulated on a per-second basis, which will cause the total transfer speed to become lower than the given number. Sometimes of course substantially lower, if your transfer stalls during periods.

Работа по протоколу FTP

Скачать файл с FTP-сервера:

> curl -u username:password -O ftp://example.com/file.zip

Если заданный FTP путь является директорией, то по умолчанию будет выведен список файлов в ней:

> curl -u username:password -O ftp://example.com/public_html/

Выгрузить файл на FTP-сервер

> curl -u username:password -T file.zip ftp://example.com/

Получить вывод из стандартного ввода и сохранить содержимое на сервере под именем :

> curl -u username:password -T - ftp://example.com/data.txt

Дополнительно:

  • Утилита curl. Обмен данными с сервером
  • Пользуемся curl для отладки HTTP

Поиск:
CLI • CURL • Cookie • FTP • GET • HTTP • Linux • POST • URL • Web-разработка • Windows • Форма

Использования cURL онлайн

Да, это возможно. Вы можете выполнить cURL удаленно с помощью следующих инструментов.Online CURL — компактный инструмент для извлечения URL-адреса онлайн и добавления следующих параметров.

--connect-timeout
--cookie
--data
--header
--head
--location
--max-time
--proxy
--request
--user
--url
--user-agent

Пример вывода:

cURL command line builder–позволяет создать команду cURL, с помощью которой можно ввести информацию в пользовательский интерфейс.

cURL — полезная утилита для устранения проблем с подключением в режиме реального времени.

Пожалуйста, оставьте свои отзывы по текущей теме статьи. За комментарии, отклики, подписки, лайки, дизлайки низкий вам поклон!

Legacy Windows and SSL

Schannel (from Windows SSPI), is the native SSL library in Windows. However, Schannel in Windows <= XP is unable to connect to servers that no longer support the legacy handshakes and algorithms used by those versions. If you will be using curl in one of those earlier versions of Windows you should choose another SSL backend such as OpenSSL.

Apple Platforms (macOS, iOS, tvOS, watchOS, and their simulator counterparts)

On modern Apple operating systems, curl can be built to use Apple’s SSL/TLS implementation, Secure Transport, instead of OpenSSL. To build with Secure Transport for SSL/TLS, use the configure option . (It is not necessary to use the option .)

When Secure Transport is in use, the curl options and and their libcurl equivalents, will be ignored, because Secure Transport uses the certificates stored in the Keychain to evaluate whether or not to trust the server. This, of course, includes the root certificates that ship with the OS. The and options, and their libcurl equivalents, are currently unimplemented in curl with Secure Transport.

In general, a curl build for an Apple combination can be taken by providing appropriate values for , , below and running the commands:

Above will build curl for macOS platform with architecture and as deployment target.

Here is an example for iOS device:

Another example for watchOS simulator for macs with Apple Silicon:

In all above, the built libraries and executables can be found in folder.

Android

When building curl for Android it’s recommended to use a Linux environment since using curl’s script is the easiest way to build curl for Android. Before you can build curl for Android, you need to install the Android NDK first. This can be done using the SDK Manager that is part of Android Studio. Once you have installed the Android NDK, you need to figure out where it has been installed and then set up some environment variables before launching . On macOS, those variables could look like this to compile for and API level 29:

When building on Linux or targeting other API levels or architectures, you need to adjust those variables accordingly. After that you can build curl like this:

Note that this won’t give you SSL/TLS support. If you need SSL/TLS, you have to build curl against a SSL/TLS layer, e.g. OpenSSL, because it’s impossible for curl to access Android’s native SSL/TLS layer. To build curl for Android using OpenSSL, follow the OpenSSL build instructions and then install and to and copy to . Now you can build curl for Android using OpenSSL like this:

Note, however, that you must target at least Android M (API level 23) or won’t be able to detect OpenSSL since (and the like) weren’t defined before Android M.

IBM i

For IBM i (formerly OS/400), you can use curl in two different ways:

  • Natively, running in the ILE

    You will need to build this from source. See packages/OS400/README for the ILE specific build instructions.

    . The obvious use is being able to call curl from ILE C or RPG applications.

  • In the PASE environment, which runs AIX programs. curl will be built as it would be on AIX.
    • IBM provides builds of curl in their Yum repository for PASE software.
    • To build from source, follow the Unix instructions.

There are some additional limitations and quirks with curl on this platform; they affect both environments.

PROTOCOL OPTIONS

CURLOPT_TRANSFERTEXT

Use text transfer. See CURLOPT_TRANSFERTEXT

CURLOPT_PROXY_TRANSFER_MODE

Add transfer mode to URL over proxy. See CURLOPT_PROXY_TRANSFER_MODE

CURLOPT_CRLF

Convert newlines. See CURLOPT_CRLF

CURLOPT_RANGE

Range requests. See CURLOPT_RANGE

CURLOPT_RESUME_FROM

Resume a transfer. See CURLOPT_RESUME_FROM

CURLOPT_RESUME_FROM_LARGE

Resume a transfer. See CURLOPT_RESUME_FROM_LARGE

CURLOPT_CURLU

Set URL to work on with CURLU *. See CURLOPT_CURLU

CURLOPT_CUSTOMREQUEST

Custom request/method. See CURLOPT_CUSTOMREQUEST

CURLOPT_FILETIME

Request file modification date and time. See CURLOPT_FILETIME

CURLOPT_DIRLISTONLY

List only. See CURLOPT_DIRLISTONLY

CURLOPT_NOBODY

Do not get the body contents. See CURLOPT_NOBODY

CURLOPT_INFILESIZE

Size of file to send. CURLOPT_INFILESIZE

CURLOPT_INFILESIZE_LARGE

Size of file to send. CURLOPT_INFILESIZE_LARGE

CURLOPT_UPLOAD

Upload data. See CURLOPT_UPLOAD

CURLOPT_UPLOAD_BUFFERSIZE

Set upload buffer size. See CURLOPT_UPLOAD_BUFFERSIZE

CURLOPT_MIMEPOST

Post/send MIME data. See CURLOPT_MIMEPOST

CURLOPT_MAXFILESIZE

Maximum file size to get. See CURLOPT_MAXFILESIZE

CURLOPT_MAXFILESIZE_LARGE

Maximum file size to get. See CURLOPT_MAXFILESIZE_LARGE

CURLOPT_TIMECONDITION

Make a time conditional request. See CURLOPT_TIMECONDITION

CURLOPT_TIMEVALUE

Time value for the time conditional request. See CURLOPT_TIMEVALUE

CURLOPT_TIMEVALUE_LARGE

Time value for the time conditional request. See CURLOPT_TIMEVALUE_LARGE

DESCRIPTION

curl_easy_setopt is used to tell libcurl how to behave. By setting the appropriate options, the application can change libcurl’s behavior. All options are set with an option followed by a parameter. That parameter can be a long, a function pointer, an object pointer or a curl_off_t, depending on what the specific option expects. Read this manual carefully as bad input values may cause libcurl to behave badly! You can only set one option in each function call. A typical application uses many curl_easy_setopt calls in the setup phase.

Options set with this function call are valid for all forthcoming transfers performed using this handle. The options are not in any way reset between transfers, so if you want subsequent transfers with different options, you must change them between the transfers. You can optionally reset all options back to internal default with curl_easy_reset.

Strings passed to libcurl as ‘char *’ arguments, are copied by the library; the string storage associated to the pointer argument may be discarded or reused after curl_easy_setopt returns. The only exception to this rule is really CURLOPT_POSTFIELDS, but the alternative that copies the string CURLOPT_COPYPOSTFIELDS has some usage characteristics you need to read up on. This function does not accept input strings longer than CURL_MAX_INPUT_LENGTH (8 MB).

The order in which the options are set does not matter.

Before version 7.17.0, strings were not copied. Instead the user was forced keep them available until libcurl no longer needed them.

The handle is the return code from a curl_easy_init or curl_easy_duphandle call.

Curl.exe file information

Curl.exe process in Windows Task Manager

The process known as The cURL executable or The curl executable belongs to software The cURL executable or The curl executable or ReadCube by cURL, http://curl.haxx.se or curl, https://curl.haxx.se or pepsmich or cURL, https://curl.haxx.se.

Description: Curl.exe is not essential for the Windows OS and causes relatively few problems. Curl.exe is located in a subfolder of «C:\»—typically C:\ or C:\Users\Default\AppData\Roaming\Microsoft\Windows\Curl\.
Known file sizes on Windows 10/8/7/XP are 10,240 bytes (25% of all occurrences), 514,560 bytes and .  
The program is not visible. The curl.exe file is not a Windows system file.
Curl.exe is able to monitor applications.
Therefore the technical security rating is 67% dangerous, but you should also take into account the user reviews.

Recommended: Identify curl.exe related errors

  • If curl.exe is located in a subfolder of the user’s profile folder, the security rating is 57% dangerous. The file size is 596,992 bytes (42% of all occurrences), 2,598,912 bytes, 584,192 bytes, 591,872 bytes or 480,048 bytes.
    The program is not visible. Curl.exe is not a Windows system file.
    Curl.exe is able to monitor applications.
    Uninstalling this variant:
    The software publisher Labtiva provides direct support (labtiva.com). You could uninstall the associated program (Start > Control Panel > Uninstall a Program > ReadCube).

  • If curl.exe is located in the C:\Windows folder, the security rating is 44% dangerous. The file size is 2,089,984 bytes (50% of all occurrences) or 490,496 bytes.
    The program is not visible. It is not a Windows system file. Curl.exe is located in the Windows folder, but it is not a Windows core file.
    Curl.exe is able to monitor applications.
  • If curl.exe is located in a subfolder of C:\Windows, the security rating is 66% dangerous. The file size is 2,619,392 bytes.
  • If curl.exe is located in the C:\Windows\System32 folder, the security rating is 4% dangerous. The file size is 386,048 bytes.

1: Загрузка файлов из удаленных источников

Обычная команда curl (без каких-либо аргументов) извлечет файл и отобразит его содержимое в стандартном выводе.

Давайте попробуем загрузить файл robots.txt:

Вы увидите, что содержимое файла отображается на экране:

Предоставьте утилите curl URL-адрес, и она извлечет ресурс и отобразит его содержимое на вашем экране.

Сохранение загруженных файлов

Получение файла и отображение его содержимого – это хорошо, но это не сохраняет файл в системе. Что делать, если файл все же нужно сохранить?

Чтобы сохранить удаленный файл в локальной системе с его исходным именем, добавьте аргумент –remote-name или используйте параметр -O:

Ваш файл будет скачан:

Вместо содержимого файла curl отображает индикатор прогресса и сохраняет файл с тем же именем, что и на удаленном сервере. Вы можете проверить всё с помощью команды cat:

Файл содержит именно то, что вы видели ранее на экране:

Теперь давайте посмотрим, как выбрать новое имя для загруженного файла.

DESCRIPTION

curl is a tool for transfering data from or to a server. It supports these protocols: DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET or TFTP. The command is designed to work without user interaction.

curl offers a busload of useful tricks like proxy support, user authentication, FTP upload, HTTP post, SSL connections, cookies, file transfer resume and more. As you will see below, the number of features will make your head spin!

curl is powered by libcurl for all transfer-related features. See libcurl(3) for details.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector