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

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

Для решения таких задач и задач подобного круга можно воспользоваться утилитой curl. Она позволяет решить намного более широкий круг задач, среди которых даже имитация действий пользователя на сайте. В этой статье мы рассмотрим как пользоваться curl, что это такое и зачем нужна эта программа.

Содержание статьи:

Что такое curl?

На самом деле, curl — это больше чем просто утилита командной строки для Linux или Windows. Это набор библиотек, в которых реализуются базовые возможности работы с URL страницами и передачи файлов. Библиотека поддерживает работу с протоколами: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, а также POP3, IMAP и SMTP. Она отлично подходит для имитации действий пользователя на страницах и других операций с URL адресами.

Поддержка библиотеки curl была добавлена в множество различных языков программирования и платформ. Утилита curl — это независимая обвертка для этой библиотеки. Именно на этой утилите мы и остановимся в этой статье.

Команда curl

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

$ curl опции ссылка

Теперь рассмотрим основные опции:

  • -# — отображать простой прогресс-бар во время загрузки;
  • -0 — использовать протокол http 1.0;
  • -1 — использовать протокол шифрования tlsv1;
  • -2 — использовать sslv2;
  • -3 — использовать sslv3;
  • -4 — использовать ipv4;
  • -6 — использовать ipv6;
  • -A — указать свой USER_AGENT;
  • -b — сохранить Cookie в файл;
  • -c — отправить Cookie на сервер из файла;
  • -C — продолжить загрузку файла с места разрыва или указанного смещения;
  • -m — максимальное время ожидания ответа от сервера;
  • -d — отправить данные методом POST;
  • -D — сохранить заголовки, возвращенные сервером в файл;
  • -e — задать поле Referer-uri, указывает с какого сайта пришел пользователь;
  • -E — использовать внешний сертификат SSL;
  • -f — не выводить сообщения об ошибках;
  • -F — отправить данные в виде формы;
  • -G — если эта опция включена, то все данные, указанные в опции -d будут передаваться методом GET;
  • -H — передать заголовки на сервер;
  • -I — получать только HTTP заголовок, а все содержимое страницы игнорировать;
  • -j — прочитать и отправить cookie из файла;
  • -J — удалить заголовок из запроса;
  • -L — принимать и обрабатывать перенаправления;
  • -s — максимальное количество перенаправлений с помощью Location;
  • -o — выводить контент страницы в файл;
  • -O — сохранять контент в файл с именем страницы или файла на сервере;
  • -p — использовать прокси;
  • —proto — указать протокол, который нужно использовать;
  • -R —  сохранять время последнего изменения удаленного файла;
  • -s — выводить минимум информации об ошибках;
  • -S — выводить сообщения об ошибках;
  • -T — загрузить файл на сервер;
  • -v — максимально подробный вывод;
  • -y — минимальная скорость загрузки;
  • -Y — максимальная скорость загрузки;
  • -z — скачать файл, только если он был модифицирован позже указанного времени;
  • -V — вывести версию.

Это далеко не все параметры curl linux, но здесь перечислено все основное, что вам придется использовать.

Как пользоваться 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 "[email protected];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 --header '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

Выводы

В этой статье мы рассмотрели как пользоваться curl, зачем нужна эта утилита и основные ее возможности. Несмотря на свою схожесть с wget, они очень сильно отличаются. Команда curl linux предназначена больше для анализа и имитации различных действий на сервере, тогда как wget больше подходит для загрузки файлов и краулинга сайтов.

losst.ru

5 простых примеров использования cURL – Блог админа

cURL очень удобная программа командной строки для передачи информации с и на сервер. cURL поддерживает различные протоколы, такие как FILE, HTTP, HTTPS, IMAP, IMAPS, LDAP, DICT, LDAPS, TELNET, FTP, FTPS, GOPHER, RTMP, RTSP, SCP, SFTP, POP3, POP3S, SMB, SMBS, SMTP, SMTPS, и TFTP.

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

1. Проверка URL

Одна из самых простых команд cURL — просто набираете имя программы и указываете URLкоторый хотите проверить

Эта команда отобразит содержимое указанного URL на дисплее

2. Сохранение вывода URL в файл

Вывод команды cURL может быть легко сохранен в файл простым добавлением опции -o.

curl -o website https://domain.com
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100 41793    0 41793    0     0   275k      0 —:—:— —:—:— —:—:—  2.9M

curl -o website https://domain.com

 

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

Dload  Upload   Total   Spent    Left  Speed

100 41793    0 41793    0     0   275k      0 —:—:— —:—:— —:—:—  2.9M

В этом примере вывод будет  сохранен в файл ‘website’ в текущей директории.

3. Скачивание файлов при помощи cURL

Вы можете скачивать файлы при помощи cURL если добавите опцию -O. Эта опция сохраняет файл на локальной машине с тем же именем что и на удаленном сервере.

curl -O https://domain.com/file.zip

curl -O https://domain.com/file.zip

В этом примере zip-архив ‘file.zip’ будет скачан в текущую директорию и сохранен с именем ‘file.zip’.

Конечно, вы можете скачать файл и сохранить его под другим именем добавив как в примере выше опцию -o.

curl -o archive.zip https://domain.com/file.zip

curl -o archive.zip https://domain.com/file.zip

В этом примере архив ‘file.zip’ будет скачан и сохранен под именем ‘archive.zip’.

cURL так же может скачивать несколько файлов одновременнокак в примере ниже

curl -O https://domain.com/file.zip -O https://domain.com/file2.zip

curl -O https://domain.com/file.zip -O https://domain.com/file2.zip

При помощи cURL так же можно скачать файлы по протоколу SSH

curl -u user sftp://server.domain.com/path/to/file

curl -u user sftp://server.domain.com/path/to/file

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

4. Получение информации о HTTP заголовках сайта

Вы легко можете получить HTTP с любого сайта используя опцию -I option (большая i).

curl -I http://domain.com
HTTP/1.1 200 OK
Date: Sun, 16 Oct 2016 23:37:15 GMT
Server: Apache/2.4.23 (Unix)
X-Powered-By: PHP/5.6.24
Connection: close
Content-Type: text/html; charset=UTF-8

curl -I http://domain.com

 

HTTP/1.1 200 OK

Date: Sun, 16 Oct 2016 23:37:15 GMT

Server: Apache/2.4.23 (Unix)

X-Powered-By: PHP/5.6.24

Connection: close

Content-Type: text/html; charset=UTF-8

5. Доступ на FTP сервер

Для доступа на FTP сервер при помощи cURL используйте следующую команду

curl ftp://ftp.domain.com —user username:password

curl ftp://ftp.domain.com —user username:password

cURL подключится к серверу FTP и выведет список всех файлов и директорий в пользовательском каталоге

Вы можете скачать файл по FTP

curl ftp://ftp.domain.com/file.zip —user username:password

curl ftp://ftp.domain.com/file.zip —user username:password

И закачать файл на FTP сервер

curl -T file.zip ftp://ftp.domain.com/ —user username:password

curl -T file.zip ftp://ftp.domain.com/ —user username:password

Чтобы узнать о всех возможностях программы cURL почитайте руководство по ней, используя команду

На этом, пока, всё. Удачи 🙂

Поделиться ссылкой:

Похожие записи:

mirivlad.ru

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

cURL очень полезный инструмент командной строки для передачи данных от или к серверу. Curl поддерживает различные протоколы, такие как FILE, HTTP, HTTPS, IMAP, IMAPS, LDAP, DICT, LDAPS, TELNET, FTP, FTPS, GOPHER, RTMP, RTSP, SCP, SFTP, POP3, POP3S, SMB, SMBS, SMTP, SMTPS, и TFTP.

cURL может быть использован самыми различными и интересными способами. С помощью этого инструмента вы можете скачать, загрузить файлы и управлять ими, проверить свой адрес электронной почты, или даже обновлять свой статус на некоторых веб – сайтах социальных медиа или проверить погоду на улице. В этой статье мы рассмотрим пять наиболее полезных и основных видов использования инструмента cURL на любой Linux VPS.

1. Проверьте URL

Одним из наиболее распространенных и простейших применений cURL печатает саму команду, а затем URL, который вы хотите проверить

curl https://domain.ru

 

Эта команда будет отображать содержимое URL на вашем терминале

2. Сохраните вывод URL в файл

Выход команды cURL может легко сохранить в файл, добавив опцию -o в команде, как показано ниже

curl -o website https://domain.ru

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100 41793    0 41793    0     0   275k      0 --:--:-- --:--:-- --:--:--  2.9M

 

В этом примере, вывод будет сохранен в файл с именем ‘website’ в текущем рабочем каталоге.

3. Загрузка файлов с помощью Curl

Вы можете скачивать файлы при помощи Curl, путем добавления опции -o к команде. Он используется для сохранения файлов на локальном сервере с теми же именами, как и на удаленном сервере

curl -O https://domain.ru/file.zip

 

В этом примере архив ‘file.zip’ будет загружен в текущий рабочий каталог.

Вы также можете загрузить файл с другим именем, добавив опцию -o к cURL.

curl -o archive.zip https://domain.ru/file.zip

 

Таким образом, архив ‘file.zip’ будет загружен и сохранен как ‘Archive.zip’.

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

curl -O https://domain.ru/file.zip -O https://domain.com/file2.zip

 

Curl также можно использовать для загрузки файлов надежно через SSH с помощью следующей команды

curl -u user sftp://server.domain.ru/path/to/file

 

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

4. Взять информацию из заголовка HTTP веб-сайта

Вы можете легко получить информацию заголовка HTTP из любого веб-сайта, добавив опцию -I (‘i’) к cURL.

curl -I http://domain.ru

HTTP/1.1 200 OK
Date: Sun, 16 Oct 2016 23:37:15 GMT
Server: Apache/2.4.23 (Unix)
X-Powered-By: PHP/5.6.24
Connection: close
Content-Type: text/html; charset=UTF-8

 

5. Доступ к FTP-серверу

Чтобы получить доступ к FTP-серверу с помощью Curl, надо использовать следующую команду

curl ftp://ftp.domain.ru --user username:password

 

Curl будет подключаться к FTP-серверу и выведет список всех файлов и каталогов в домашнем каталоге пользователя

Вы можете скачать файл с помощью FTP

curl ftp://ftp.domain.ru/file.zip --user username:password

 

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

curl -T file.zip ftp://ftp.domain.ru/ --user username:password

 

Вы можете проверить страницу Curl вручную, чтобы увидеть все доступные опции cURL и его функциональные возможности

man curl

 

PS. Если вам понравился этот пост, пожалуйста поделитесь им с друзьями в социальных сетях с помощью кнопок ниже или просто оставьте комментарий. Благодарю.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

andreyex.ru

11 примеров использование команд cURL в режиме реального времени

1.3K
cURL — инструмент командной строки для получения или отправки данных с использованием синтаксиса URL.

Если вы работаете в службе поддержки, то должны уметь использовать команды cURL для устранения неполадок веб-приложений. cURL — кроссплатформенная утилита для Windows, MAC и UNIX.
Ниже приведены некоторые часто используемые примеры синтаксиса.

Если вы работаете в UNIX-системе и пытаетесь подключиться к внешнему URL-адресу, то сначала проверьте наличие доступа к ресурсу через curl. Для этого используйте следующую команду:

Если нужно сохранить содержимое URL или URI в конкретном файле, используйте следующий синтаксис:

# curl yoururl.com > yoururl.html

Например:

[[email protected]]# curl 74.125.68.100 >/tmp/google.html

Приведенный выше пример сохранит все содержимое с хоста 74.125.68.100 в файл /tmp/google.html.

Если хотите удостовериться, что получаете ожидаемый заголовок запроса и ответа, используйте следующую команду:

например:

[[email protected]  ]# curl -v 74.125.68.100   
* About to connect() to 74.125.68.100 port 80 (#0)   
*   Trying 74.125.68.100...   
* Connected to 74.125.68.100 (74.125.68.100) port 80 (#0)   
> GET / HTTP/1.1   
> User-Agent: curl/7.29.0   
>Host: 74.125.68.100   
>Accept: */*   
>< HTTP/1.1 200 OK   
<Date: Sun, 18 Jan 2015 06:02:58 GMT   
<Expires: -1   
< Cache-Control: private, max-age=0   
< Content-Type: text/html; charset=ISO-8859-1   
< Set-Cookie: NID=67=EZH_o3sPvCSnxzVatz21OHv_; 
expires=Mon, 20-Jul-2015 06:02:58 GMT; 
path=/; 
domain=.; HttpOnly
< P3P: CP="This is not a P3P policy! 
See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for moreinfo."   
< Server: gws
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN   
<Alternate-Protocol: 80:quic,p=0.02   
<Accept-Ranges: none
<Vary: Accept-Encoding
<Transfer-Encoding: chunked

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

# curl –-limit-rate 2000B

например:

# curl –-limit-rate 2000B 74.125.68.100

Если необходимо проверить, можно ли использовать прокси-сервер, примените следующий синтаксис:

# curl --proxyyourproxy:port http://yoururl.com

Для устранения конкретной проблемы можно использовать Curl, чтобы вставить в header свои данные. Рассмотрим следующий пример запроса с Content-Type:

# curl --header 'Content-Type: application/json' http://yoururl.com

Мы просим curl передать Content-Type в качестве application / json в заголовок запроса.

Вы можете добавить заголовок к запросу с помощью синтаксиса — header.

# curl –-header “X-CustomHeader: GeekFlare” http://yoururl.com

например:

[[email protected]]# curl -v --header "X-CustomHeader: GeekFlare" 74.125.68   
* About to connect() to 74.125.68.100 port 80 (#0)   
*   Trying 74.125.68.100...   
* Connected to 74.125.68.100 (74.125.68.100) port 80 (#0)   
> GET / HTTP/1.1   
> User-Agent: curl/7.29.0   
>Host: 74.125.68.100   
>Accept: */*   
> X-CustomHeader: GeekFlare
>< HTTP/1.1 200 OK   
<Date: Sun, 18 Jan 2015 08:30:25 GMT   
<Expires: -1   
< Cache-Control: private, max-age=0   
< Content-Type: text/html; charset=ISO-8859-1   
< Set-Cookie: NID=67=CkzDX-zTtWA0d9M1QVG4O3Im; 
expires=Mon, 20-Jul-2015 08:30:25 GMT; 
path=/; domain=.; HttpOnly
< P3P: CP="This is not a P3P policy! 
See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for moreinfo."   
< Server: gws
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN   
<Alternate-Protocol: 80:quic,p=0.02   
<Accept-Ranges: none
<Vary: Accept-Encoding
<Transfer-Encoding: chunked

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

# curl --head http://yoururl.com

Пример:

[[email protected]]# curl -I 74.125.68.100   
HTTP/1.1 200 OK   
Date: Sun, 18 Jan 2015 08:31:22 GMT   
Expires: -1   
Cache-Control: 
private, max-age=0   
Content-Type: text/html; charset=ISO-8859-1   
Set-Cookie: NID=67=SpnXKTDUhw7QGakIeLxmDSF; 
expires=Mon, 20-Jul-2015 08:31:22 GMT; path=/; domain=.; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for moreinfo."   
Server: gws   X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN   
Alternate-Protocol: 80:quic,p=0.02   
Transfer-Encoding: chunked
Accept-Ranges: none
Vary: Accept-Encoding
[[email protected]  ]#

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

curl --insecure https://yoururl.com

Чтобы подключиться к URL- адресу только по протоколу SSL V2 / V3 или TLS,используйте следующий синтаксис.

Для подключения с использованием SSLV2:

# curl --sslv2 https://yoururl.com

Для подключения с использованием SSLV3:

# curl --sslv3 https://yoururl.com

Для подключения через TLS:

# curl --tlsv1 https://yoururl.com

С помощью cURL можно загрузить файл с ftp-сервера, указав имя пользователя и пароль.

# curl -u user:password -O ftp://ftpurl/style.css

Всегда можно использовать «-v» с любым синтаксисом для вывода в подробном режиме.

Да, это возможно. Вы можете выполнить 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 — полезная утилита для устранения проблем с подключением в режиме реального времени.

Данная публикация представляет собой перевод статьи «11 cURL Command Usage with Real-Time Example» , подготовленной дружной командой проекта Интернет-технологии.ру

www.internet-technologies.ru

curl основные команды

16.05.2018


Чтобы проверить заголовки сервера можно, конечно, воспользоваться сторонними сервисами (благо, их много), а можно воспользоваться своим сервером.


На помощь нам в данном процессе приходит curl.


Останавливаться на том, что это такое, думаю, не стоит — если вы сюда пришли, то уже, думаю, знаете что это. Остановлюсь только на наиболее необходимых командах для веб-мастера.


Чтобы просто увидеть на экране что отдается сервером по указанному пути, нужно вызвать curl без дополнительных опций:

curl https://domain.com


Если же нужно выкачать содержимое урла, то в этом нам поможет опция «-O»:

curl -O https://domain.com/file.zip


Чтобы указать имя, под которым будет сохранена вся информация, пишем так:

curl -o website https://domain.com


В результате, указанный путь будет сохранен в файле website.


Одна из самых важных команд для вебмастера:

curl -I http://domain.com


Результатом выполнения данной команды будут http-заголовки указанной страницы.


Ниже представлены все основные опции curl-а:

  • -# — отображать простой прогресс-бар во время загрузки;
  • -0 — использовать протокол http 1.0;
  • -1 — использовать протокол шифрования tlsv1;
  • -2 — использовать sslv2;
  • -3 — использовать sslv3;
  • -4 — использовать ipv4;
  • -6 — использовать ipv6;
  • -A — указать свой USER_AGENT;
  • -b — сохранить Cookie в файл;
  • -c — отправить Cookie на сервер из файла;
  • -C — продолжить загрузку файла с места разрыва или указанного смещения;
  • -m — максимальное время ожидания ответа от сервера;
  • -d — отправить данные методом POST;
  • -D — сохранить заголовки, возвращенные сервером в файл;
  • -e — задать поле Referer-uri, указывает с какого сайта пришел пользователь;
  • -E — использовать внешний сертификат SSL;
  • -f — не выводить сообщения об ошибках;
  • -F — отправить данные в виде формы;
  • -G — если эта опция включена, то все данные, указанные в опции -d будут передаваться методом GET;
  • -H — передать заголовки на сервер;
  • -I — получать только HTTP заголовок, а все содержимое страницы игнорировать;
  • -j — прочитать и отправить cookie из файла;
  • -J — удалить заголовок из запроса;
  • -L — принимать и обрабатывать перенаправления;
  • -s — максимальное количество перенаправлений с помощью Location;
  • -o — выводить контент страницы в файл;
  • -O — сохранять контент в файл с именем страницы или файла на сервере;
  • -p — использовать прокси;
  • —proto — указать протокол, который нужно использовать;
  • -R —  сохранять время последнего изменения удаленного файла;
  • -s — выводить минимум информации об ошибках;
  • -S — выводить сообщения об ошибках;
  • -T — загрузить файл на сервер;
  • -v — максимально подробный вывод;
  • -y — минимальная скорость загрузки;
  • -Y — максимальная скорость загрузки;
  • -z — скачать файл, только если он был модифицирован позже указанного времени;
  • -V — вывести версию.

pai-bx.com

Написание HTTP-запросов с помощью Curl

Эта статья предполагает, что вам известны основы построения сетей и язык HTML.

Возможность написания скриптов является существенной при построении хорошей компьютерной системы. Расширяемость возможностей Unix-систем при помощи shell-скриптов и различных программ, выполняющих автоматизированные команды — вот одна из причин того, почему они имеют такой успех.

Увеличивающееся число приложений, которые переходят на веб, привело к тому, что тема HTTP-скриптов становится все более востребованной. Важными задачами в этой области являются автоматическое извлечение информации из интернета, отсылание или загрузка данных на web-сервера и т.п.

Curl — инструмент командной строки, который позволяет проделывать URL-манипуляции и передачи различного рода. Эта статья сфокусирована на создании простых HTTP-запросов. Предполагается, что вы уже знаете где набирать

# curl —help

или

# curl —manual

для получения информации о curl.

Curl не является инструментом, который будет делать все за вас. Он создает запросы, принимает данные и отсылает данные. Возможно, вам потребуется какой-то «клей» для объединения всего, возможно какой-то скриптовый язык (например bash) или несколько ручных вызовов.

1. Протокол HTTP

HTTP — это протокол, используемый при приеме данных от web-серверов. Это очень простой протокол, который построен на TCP/IP. Протокол также позволяет отправлять информацию на сервер от клиента, используя несколько методов, как будет показано далее.

HTTP — это строки ASCII-текста, отсылаемые от клиента к серверу для запроса какого-либо действия. При получении запроса сервер отвечает клиенту несколькими служебными текстовыми строками, а затем и собственно контентом.

Используя ключ curl -v, вы можете увидеть, какие команды curl отсылает серверу, а также другой информационный текст. Ключ -v — пожалуй, единственная возможность отладить или даже понять особенности взаимодействия curl и веб-сервера.

2. URL

Формат URL (Uniform Resource Locator — универсальный адрес ресурса) задает адрес определенного ресурса в Интернете. Вам это наверняка известно, примеры URL: http://curl.haxx.se или https://yourbank.com.

3. Получить (GET) страницу

Простейший и самый обычный HTTP-запрос — получить содержимое URL. URL может ссылаться на web-страницу, картинку или файл. Клиент отсылает GET-запрос на сервер и получает запрашиваемый документ. Если выполнить команду

# curl http://curl.haxx.se

вы получите web-страницу, выведенную в ваше терминальное окно. Полный HTML-документ, который содержится по этому адресу URL.

Все HTTP-ответы содержат набор заголовков, которые обычно скрыты. Чтобы их увидеть вместе с самим документом, используйте ключ curl -i. Вы можете также запросить только заголовки при помощи ключа -I (который заставит curl сделать HEAD-запрос).

4. Формы

Формы — основной способ представления web-сайта как HTML-страницы с полями, в которые пользователь вводит данные, и затем нажимает на кнопку ‘OK’ или ‘Отправить’, после чего данные отсылаются на сервер. Затем сервер использует принятые данные и решает, как действовать дальше: искать информацию в базе данных, показать введенный адрес на карте, добавить сообщение об ошибке или использовать информацию для аутентификации пользователя. Разумеется, на стороне сервера имеется какая-то программа, которая принимает ваши данные.

4.1 GET

GET-форма использует метод GET, например следующим образом:

<form method=»GET» action=»junk.cgi»>

<input type=text name=»birthyear»>

<input type=submit name=press value=»OK»>

</form>

Если вы откроете этот код в вашем браузере, вы увидите форму с текстовым полем и кнопку с надписью «OK». Если вы введете ‘1905’ и нажмете OK, браузер создаст новый URL, по которому и проследует. URL будет представляться строкой, состоящей из пути предыдущего URL и строки, подобной «junk.cgi?birthyear=1905&press=OK».

Например, если форма располагалась по адресу «www.hotmail.com/when/birth.html», то при нажатии на кнопку OK вы попадете на URL «www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK».

Большинство поисковых систем работают таким образом.

Чтобы curl сформировал GET-запрос, просто введите то, что ожидалось от формы:

# curl «www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK»

4.2 POST

Метод GET приводит к тому, что вся введенная информация отображается в адресной строке вашего браузера. Может быть это хорошо, когда вам нужно добавить страницу в закладки, но это очевидный недостаток, когда вы вводите в поля формы секретную информацию, либо когда объем информации, вводимый в поля, слишком велик (что приводит к нечитаемому URL).

Протокол HTTP предоставляет метод POST. С помощью него клиент отправляет данные отдельно от URL и поэтому вы не увидете их в адресной строке.

Форма, генерирующая POST-запрос, похожа на предыдущую:

<form method=»POST» action=»junk.cgi»>

<input type=text name=»birthyear»>

<input type=submit name=press value=» OK «>

</form>

Curl может сформировать POST-запрос с теми же данными следующим образом:

# curl -d «birthyear=1905&press=%20OK%20» www.hotmail.com/when/junk.cgi

Этот POST-запрос использует ‘Content-Type application/x-www-form-urlencoded’, это самый широко используемый способ.

Данные, которые вы отправляете к серверу, должны быть правильно закодированы, curl не будет делать это за вас. К примеру, если вы хотите, чтобы данные содержали пробел, вам нужно заменить этот пробел на %20 и т.п. Недостаток внимания к этому вопросу — частая ошибка, из-за чего данные передаются не так, как надо.

4.3 Загрузка файлов с помощью POST (File Upload POST)

В далеком 1995 был определен дополнительный способ передавать данные по HTTP. Он задокументирован в RFC 1867, поэтому этот способ иногда называют RFC1867-posting.

Этот метод в основном разработан для лучшей поддержки загрузки файлов. Форма, которая позволяет пользователю загрузить файл, выглядит на HTML примерно следующим образом:

<form method=»POST» enctype=’multipart/form-data’ action=»upload.cgi»>

<input type=file name=upload>

<input type=submit name=press value=»OK»>

</form>

Заметьте, что тип содержимого Content-Type установлен в multipart/form-data.

Чтобы отослать данные в такую форму с помощью curl, введите команду:

# curl -F [email protected] -F press=OK [URL]

4.4 Скрытые поля

Обычный способ для передачи информации о состоянии в HTML-приложениях — использование скрытых полей в формах. Скрытые поля не заполняются, они невидимы для пользователя и передаются так же, как и обычные поля.

Простой пример формы с одним видимым полем, одним скрытым и кнопкой ОК:

<form method=»POST» action=»foobar.cgi»>

<input type=text name=»birthyear»>

<input type=hidden name=»person» value=»daniel»>

<input type=submit name=»press» value=»OK»>

</form>

Чтобы отправить POST-запрос с помощью curl, вам не нужно думать о том, скрытое поле или нет. Для curl они все одинаковы:

# curl -d «birthyear=1905&press=OK&person=daniel» [URL]

4.5 Узнать, как выглядит POST-запрос

Когда вы хотите заполнить форму и отослать данные на сервер с помощью curl, вы наверняка хотите, чтобы POST-запрос выглядел точно также, как и выполненный с помощью браузера.

Простой способ увидеть свой POST-запрос, это сохранить HTML-страницу с формой на диск, изменить метод на GET, и нажать кнопку ‘Отправить’ (вы можете также изменить URL, которому будет передаваться данные).

Вы увидите, что данные присоединились к URL, отделенные символами ‘?’, как и предполагается при использовании GET-форм.

5. PUT

Пожалуй, лучший способ загружать данные на HTTP-сервер, это использовать PUT. Опять же, это требует программы (скрипта) на серверной части, которая знает, что делать и как принимать поток HTTP PUT.

Отослать файл на сервер при помощи curl:

# curl -T uploadfile www.uploadhttp.com/receive.cgi

6. Аутентификация

Аутентификация — передача серверу имени пользователя и пароля, после этого он проверяет, имеете ли вы право выполнить требуемый запрос. Аутентификация по методу Basic (которым curl пользуется по умолчанию) основана на открытом тексте, что означает, что имя пользователя и пароль не будут зашифрованы, а лишь слегка «затуманены» по алгоритму Base64, что оставляет возможность узнать эту информацию злоумышленникам на пути между вами и HTTP-сервером.

Указание curl использовать имя пользователя и пароль:

# curl -u name:password www.secrets.com

Сайт может требовать использования другого метода аутентификации (посмотрите, что пишет сервер в заголовках), в этих случаях можно использовать ключи —ntlm, —digest, —negotiate или даже —anyauth. Иногда доступ к внешним HTTP-серверам происходит через прокси, так часто делают в компаниях и фирмах. HTTP-прокси может требовать свои логин и пароль для доступа к Интернету. Соответствующий ключ curl:

# curl -U proxyuser:proxypassword curl.haxx.se

Если прокси требует аутентификации по методу NTLM, укажите —proxy-ntlm, если метод Digest, то —proxy-digest.

Если вы не укажете пароль в ключах -u и -U, то curl спросит его у вас в интерактивном режиме.

Заметьте, что когда curl работает, строка запуска (а вместе с этим и ключи, и пароли) могут быть видны другим пользователям вашей системы в списке задач. Есть способы предотвратить это. Об этом ниже.

7. Referer

HTTP-запрос может включать поле ‘referer’, которое указывает, с какого URL пользователь пришел на данный ресурс. Некоторые программы/скрипты проверяют поле ‘referer’ и не выполняют запрос, если пользователь пришел с неизвестной страницы. Хотя это и глупый способ проверки, тем не менее многие скрипты используют его. С помощью curl вы можете вписать что угодно в поле ‘referer’ и таким образом заставлять выполнять то, что вам нужно.

Это делается следующим образом:

# curl -e http://curl.haxx.se daniel.haxx.se

8. User Agent

Все HTTP-запросы поддерживают поле ‘User-Agent’, в котором указывается клиентское приложение пользователя. Многие web-приложения используют эту информацию, чтобы тем или иным способом отобразить страницу. Web-программисты создают несколько версий страницы для пользователей разных браузеров в целях улучшения внешнего вида, использования различных скриптов javascript, vbscript и т.д.

Иногда вы можете обнаружить, что curl возвращает страницу не такой, какой вы ее видели в своем браузере. В этом случае как раз уместно использовать поле ‘User Agent’, чтобы в очередной раз обмануть сервер.

Замаскировать curl под Internet Explorer на машине с Windows 2000:

# curl -A «Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)» [URL]

Почему бы не стать Netscape 4.73 на Linux-машине (PIII):

# curl -A «Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)» [URL]

9. Перенаправления (redirects)

Отвечая на ваш запрос, сервер вместо самой страницы может вернуть указание, куда браузер должен пойти дальше, чтобы попасть на нужную страницу. Заголовок, который указывает браузеру такое перенаправление — это ‘Location:’.

По умолчанию curl не идет по адресу, указанному в ‘Location:’, а просто показывает страницу как обычно. Но можно его направить следующим образом:

# curl -L www.sitethatredirects.com

Если вы используете curl для POST-запросов на сайт, который сразу же перенаправляет на другую страницу, вы можете смело использовать связку -L и -d/-F. Curl сформирует POST-запрос для первой страницы, а затем GET-запрос для последующей.

10. Cookies

С помощью cookies веб-браузеры контролируют состояние на стороне клиента. Cookie — это имя с присоединенным содержимым. Сервер при помощи отправки cookies сообщает клиенту путь и имя хоста, по которому в следующий раз должны быть отправлены cookies, сообщает время жизни cookies и некоторые другие параметры.

Когда клиент соединяется с сервером по адресу, указанному в принятом cookie, клиент посылает этот cookie к серверу (если время жизни не истекло).

Многие приложения и сервера используют этот метод, чтобы объединить нескольких запросов в одну логическую сессию. Чтобы curl также мог выполнять такую функцию, мы должны уметь сохранять и отправлять cookies, как и делают браузеры.

Простейший способ отправить cookie к серверу при получении страницы с помощью curl, это добавить соответствующий ключ в командной строке:

# curl -b «name=Daniel» www.cookiesite.com

Cookies отправляются как обычные HTTP-заголовки. Это позволяет curl сохранять cookies, сохраняя заголовки. Сохранение cookies с помощью curl выполняется командой:

# curl -D headers_and_cookies www.cookiesite.com

(кстати, для сохранения cookies лучше использовать ключ -c, об этом ниже).

У curl имеется полнофункциональный обработчик cookies, который полезен, когда вы хотите соединиться в очередной раз к серверу и использовать cookies, сохраненные в прошлый раз (либо подработанные вручную). Для использования cookies, сохраненных в файле, вызовите curl так:

# curl -b stored_cookies_in_file www.cookiesite.com

«Cookie-движок» curl включается, когда вы указываете ключ -b. Если вы хотите, чтобы curl лишь воспринимал cookies, используйте -b с указанием файла, которого не существует. Например, если вы хотите, чтобы curl принял cookies со страницы, а затем пошел по перенаправлению (возможно, отдав принятый только что cookie), то можно вызывать curl так:

# curl -b nada -L www.cookiesite.com

Curl умеет читать и писать cookie-файлы, имеющие формат Netscape и Mozilla. Это удобный способ обмениваться cookies между браузерами и автоматическими скриптами. Ключ -b автоматически определяет, является ли данный файл cookie-файлом указанных браузеров и обрабатывает его соответствующим образом, а используя ключ -c/—cookie-jar, вы можете заставить curl записать новый cookie-файл по завершении операции:

# curl -b cookies.txt -c newcookies.txt www.cookiesite.com

11. HTTPS

Есть несколько способов обезопасить ваши HTTP-передачи. Наиболее известным протоколом, решающим эту задачу, является HTTPS, или HTTP over SSL. SSL зашифровывает все посылаемые и принимаемые по сети данные, что увеличивает вероятность того, что ваша информация останется в тайне.

Curl поддерживает запросы к HTTPS-серверам благодаря свободно распространяемой библиотеке OpenSSL. Запросы происходят обычным способом:

# curl https://that.secure.server.com

11.1 Сертификаты

В мире HTTPS для аутентификации в дополнение к имени пользовавателя и паролю вы используете сертификаты. Curl поддерживает сертификаты на стороне клиента. Все сертификаты заперты ключевой фразой, которую вам нужно ввести прежде чем curl может начать с ними работу. Ключевая фраза может быть указана либо в командной строке, либо введена в интерактивном режиме. Сертификаты в curl используются следующим образом:

# curl -E mycert.pem https://that.secure.server.com

Curl также проверяет сервер на подлинность, сверяя сертификат сервера с локально хранящимся. Обнаружившееся несоответствие приведет к тому, что curl откажется соединяться. Для игнорирования проверки на подлинность используйте ключ -k.

Более подробная информация о сертификатах может быть найдена на странице http://curl.haxx.se/docs/sslcerts.html.

12. Произвольные заголовки запроса

Возможно, вам понадобится изменять или добавлять элементы отдельных запросов curl.

К примеру, вы можете изменить запрос POST на PROPFIND и отправить данные как «Content-Type: text/xml» (вместо обычного Content-Type):

# curl -d «<xml>» -H «Content-Type: text/xml» -X PROPFIND url.com

Вы можете удалить какой-нибудь заголовок, указав его без содержимого. Например, вы можете удалить заголовок ‘Host:’, тем самым сделав запрос «пустым»:

# curl -H «Host:» http://mysite.com

Также вы можете добавлять заголовки. Возможно, вашему серверу потребуется заголовок ‘Destination:’:

# curl -H «Destination: http://moo.com/nowhere» http://url.com

13. Отладка

Часто бывает так, что сайт реагирует на запросы curl не так, как на запросы браузера. В этом случае нужно максимально уподобить curl браузеру:

  • Используйте ключ —trace-ascii для сохранения подробного отчета запросов, чтобы затем подробно изучить их и разобраться в проблеме.
  • Убедитесь, что вы проверяете на cookies и используете их при необходимости (ключ чтения -b и сохранения -c)
  • Укажите в поле ‘user-agent’ один из последних популярных браузеров
  • Заполните поле ‘referer’ как это делает браузер
  • Если вы используете POST-запросы, убедитесь, что все поля передаются в том же порядке, что и браузер (см. выше, пункт 4.5)

Хороший помощник в этом нелегком деле — плагин для Mozilla/Firefox LiveHTTPHeader, который позволяет просматривать все заголовки, которые отправляет и принимает этот браузер (даже при использовании HTTPS).

Более низкоуровневый подход — захват HTTP-траффика в сети с помощью программ, таких как ethereal или tcpdump, с последующим анализом, какие заголовки были получены и отправлены браузером (HTTPS делает этот подход неэффективным).

14. Ссылки

RFC 2616 обязательно для чтения всем, кто хочет понять протокол HTTP.

RFC 2396 объясняет синтаксис URL.

RFC 2109 определяет работу cookies.

RFC 1867 определяет формат File Upload Post.

http://openssl.planetmirror.com — домашняя страница проекта OpenSSL

http://curl.haxx.se — домашняя страница проекта cURL

webhamster.ru

PHP: curl_setopt — Manual

CURLOPT_CAINFO Имя файла, содержащего один или более сертификатов, с которыми
будут сверяться узлы. Этот параметр имеет смысл только при
использовании совместно с CURLOPT_SSL_VERIFYPEER.
Может потребоваться абсолютный путь.
CURLOPT_CAPATH Директория, содержащая несколько CA сертификатов.
Используйте этот параметр совместно с
CURLOPT_SSL_VERIFYPEER.
CURLOPT_COOKIE Содержимое заголовка «Cookie: «,
используемого в HTTP-запросе.
Обратите внимание, что несколько cookies разделяются
точкой с запятой с последующим пробелом
(например, «fruit=apple; colour=red«)
CURLOPT_COOKIEFILE Имя файла, содержащего cookies. Данный файл должен быть
в формате Netscape или просто заголовками HTTP, записанными
в файл.
Если в качестве имени файла передана пустая строка, то cookies
сохраняться не будут, но их обработка все еще будет включена.
CURLOPT_COOKIEJAR Имя файла, в котором будут сохранены все внутренние cookies
текущей передачи после закрытия дескриптора, например,
после вызова curl_close.
CURLOPT_CUSTOMREQUEST

Собственный метод запроса, используемый вместо
«GET» или «HEAD»
при выполнении HTTP-запроса. Это полезно при запросах
«DELETE» или других, более редких HTTP-запросах.
Корректными значениями будут такие как «GET»,
«POST», «CONNECT» и так далее;
т.е. не вводите здесь всю строку с HTTP-запросом. Например,
указание «GET /index.html HTTP/1.0\r\n\r\n»
будет неправильным.

Замечание:

Не используйте эту возможность пока не убедитесь, что
сервер поддерживает данный тип запроса.

CURLOPT_DEFAULT_PROTOCOL

Протокол по умолчанию, если он отсутствует в схеме URL.

Добавлено в cURL 7.45.0. Доступно с PHP 7.0.7.
CURLOPT_DNS_INTERFACE

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

Добавлено в cURL 7.33.0. Доступно с PHP 7.0.7.
CURLOPT_DNS_LOCAL_IP4

Установить локальный IPv4-адрес, по которому доступне DNS.
Адрес должен быть представлен в виде строки, содержащий одно число.

Добавлено в cURL 7.33.0. Доступно с PHP 7.0.7.
CURLOPT_DNS_LOCAL_IP6

Установить локальный IPv6-адрес, по которому доступне DNS.
Адрес должен быть представлен в виде строки, содержащий одно число.

Добавлено в cURL 7.33.0. Доступно с PHP 7.0.7.
CURLOPT_EGDSOCKET Наподобие CURLOPT_RANDOM_FILE, за исключением
того, что имя файла устанавливается в сокет Entropy
Gathering Daemon.
CURLOPT_ENCODING Содержимое заголовка «Accept-Encoding: «.
Это позволяет декодировать запрос. Поддерживаемыми
кодировками являются «identity»,
«deflate» и «gzip».
Если передана пустая строка, «»,
посылается заголовок, содержащий все поддерживаемые
типы кодировок.
Добавлен в версии cURL 7.10.
CURLOPT_FTPPORT Значение, которое будет использоваться для определения
IP-адреса для команды «PORT» FTP-протокола. Команда «PORT»
сообщает серверу, с каким IP-адресом он должен устанавливать
соединение. Это может быть IP-адрес, имя хоста, имя сетевого
интерфейса (под Unix) или просто ‘-‘ для использования системного
IP-адреса по умолчанию.
CURLOPT_INTERFACE Имя используемого сетевого интерфейса. Может быть
именем интерфейса, IP адресом или именем хоста.
CURLOPT_KEYPASSWD Пароль, который требуется для использования закрытого ключа CURLOPT_SSLKEY
или CURLOPT_SSH_PRIVATE_KEYFILE.
Добавлено в cURL 7.16.1.
CURLOPT_KRB4LEVEL Уровень безопасности KRB4 (Kerberos 4). Любое из следующих
значений (в порядке от слабого к самому сильному) корректно:
«clear»,
«safe»,
«confidential»,
«private»..
Если указанная строка отличается от данных значений,
будет использовано значение «private».
Установка этого параметра в NULL полностью отключит
безопасность KRB4. На данный момент безопасность KRB4
работает только с FTP-транзакциями.
CURLOPT_LOGIN_OPTIONS Используется для установки специфичных для протокола настроек логина,
таких как предпочитаемый механизм аутентификации «AUTH=NTLM» или «AUTH=*»,
и должна использоваться совместно с CURLOPT_USERNAME.
Добавлено в cURL 7.34.0. Доступно с PHP 7.0.7.
CURLOPT_PINNEDPUBLICKEY Устанавливает зафиксированный открытый ключ.
Строка должны содержать имя файла, в котором лежит ваш зафиксированный
открытый ключ. Ожидается формат файла «PEM» или «DEX».
Строка также может быть числом в формате base64, закодированным sha256 с
префиксом «sha256//» и разделенная точкой с запятой «;».
Добавлено в cURL 7.39.0. Доступно с PHP 7.0.7.
CURLOPT_POSTFIELDS

Все данные, передаваемые в HTTP POST-запросе.
Для передачи файла, укажите перед именем файла @, а
также используйте полный путь к файлу. Тип файла также может
быть указан с помощью формата ‘;type=mimetype‘,
следующим за именем файла. Этот параметр может быть передан
как в качестве url-закодированной строки, наподобие
para1=val1&para2=val2&…‘, так и
в виде массива, ключами которого будут имена полей, а значениями
— их содержимое.
Если value является массивом,
заголовок Content-Type будет установлен в
значение multipart/form-data.

Начиная с PHP 5.2.0, при передаче файлов с префиксом
@, value должен быть
массивом.

С PHP 5.5.0 префикс @ устарел и
файлы можно отправлять с помощью CURLFile.
Префикс @ можно отключить, чтобы можно
было передавать значения, начинающиеся с @,
задав опцию CURLOPT_SAFE_UPLOAD в значение TRUE.

CURLOPT_PRIVATE Любые данные, которые должны связаны с этим дескриптором cURL.
Эти данные могут быть выбраны подзапросом опции
CURLINFO_PRIVATE функции
curl_getinfo(). cURL ничего не делает с этими данными.
Если используется множество дескрипторов cURL, эти данные обычно используются
как уникальный ключ для определения дескриптора cURL.
Добавлено в cURL 7.10.3.
CURLOPT_PROXY HTTP-прокси, через который будут направляться запросы.
CURLOPT_PROXY_SERVICE_NAME Имя сервиса аутентификации прокси. Добавлено в cURL 7.34.0. Доступно с PHP 7.0.7.
CURLOPT_PROXYUSERPWD Логин и пароль, записанные в виде
«[username]:[password]», используемые при
соединении через прокси.
CURLOPT_RANDOM_FILE Имя файла, используемого для инициализации генератора
случайных чисел для SSL.
CURLOPT_RANGE Диапазон данных, которые нужно загрузить, в формате
«X-Y», причем либо X, либо Y могут быть
опущены. Протокол HTTP также поддерживает передачу
нескольких диапазонов, разделенных запятыми, они задаются
в формате «X-Y,N-M».
CURLOPT_REFERER Содержимое заголовка «Referer: «, который будет
использован в HTTP-запросе.
CURLOPT_SERVICE_NAME Имя сервиса аутентификации. Добавлено в cURL 7.43.0. доступно с PHP 7.0.7.
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 Строка, содержащая 32 шестнадцатеричных цифры. Строка должна являться
контрольной суммой по алгоритму MD5 открытого ключа удаленного компьютера и libcurl будет сбрасывать
соединение к удаленному хосту до тех пор, пока контрольная сумма не будет соответствовать публичному ключу.
Эта опция предназначена только для передачи данных с помощью SCP и SFTP.
Добавлено в cURL 7.17.1.
CURLOPT_SSH_PUBLIC_KEYFILE Имя файла для вашего публичного ключа. Если не задано, то libcurl использует по
умолчанию файл $HOME/.ssh/id_dsa.pub, если переменная окружения HOME установлена и
файл «id_dsa.pub» в текущей директории, если переменная HOME не установлена.
Добавлено в cURL 7.16.1.
CURLOPT_SSH_PRIVATE_KEYFILE Имя файла для вашего приватного ключа. Если не задано, то libcurl использует по
умолчанию файл $HOME/.ssh/id_dsa, если переменная окружения HOME установлена и
файл «id_dsa» в текущей директории, если переменная HOME не установлена.
Если файл защищен паролем, установите пароль с помощью
CURLOPT_KEYPASSWD.
Добавлено в cURL 7.16.1.
CURLOPT_SSL_CIPHER_LIST Список шифров, используемый в SSL-передачах. Например,
RC4-SHA и TLSv1 являются
корректными списками шифров.
CURLOPT_SSLCERT Имя файла с корректно отформатированным PEM-сертификатом.
CURLOPT_SSLCERTPASSWD Пароль, необходимый для использования сертификата
CURLOPT_SSLCERT.
CURLOPT_SSLCERTTYPE Формат сертификата. Поддерживаются форматы
«PEM» (по умолчанию), «DER»
и «ENG».
Добавлен в версии cURL 7.9.3.
CURLOPT_SSLENGINE Идентификатор механизма шифрования для закрытого ключа SSL,
указанного в параметре CURLOPT_SSLKEY.
CURLOPT_SSLENGINE_DEFAULT Идентификатор механизма шифрования, используемого для
ассиметричных операций шифрования.
CURLOPT_SSLKEY Имя файла с закрытым ключом SSL.
CURLOPT_SSLKEYPASSWD

Тайный пароль, необходимый для использования закрытого
ключа SSL, указанного параметром
CURLOPT_SSLKEY.

Замечание:

Так как этот параметр содержит ценный пароль, помните,
что данный PHP-скрипт нужно хранить в безопасном месте.

CURLOPT_SSLKEYTYPE Тип закрытого ключа SSL, указанного в параметре
CURLOPT_SSLKEY. Поддерживаются следующие
типы ключей:
«PEM» (по умолчанию), «DER»
и «ENG».
CURLOPT_UNIX_SOCKET_PATH Разрешает использовать доменные сокеты UNIX в качестве конечной точки для
соединения и устанавливает путь к ним равным заданной строке (string).
Добавлено в cURL 7.40.0. Доступно с PHP 7.0.7.
CURLOPT_URL Загружаемый URL. Данный параметр может быть также установлен
при инициализации сеанса с помощью curl_init().
CURLOPT_USERAGENT Содержимое заголовка «User-Agent: «, посылаемого
в HTTP-запросе.
CURLOPT_USERNAME Ипя пользователя для аутентификации. Добавлено в cURL 7.19.1. Доступно с PHP 5.5.0.
CURLOPT_USERPWD Логин и пароль, используемые при соединении,
указанные в формате
«[username]:[password]».
CURLOPT_XOAUTh3_BEARER Задает токен доступа OAuth 2.0. Добавлено в cURL 7.33.0. Доступно с PHP 7.0.7.

www.php.net