Введение в curl и его установка

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

Сервер 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>
..........

Строки запроса и параметры

Параметры почтового индекса (), идентификатора приложения () и единиц () были переданы в конечную точку с помощью «строк запроса». Знак добавленный к URL указывает начало строки запроса. Параметры строки запроса — это параметры, которые появляются после знака :

После строки запроса каждый параметр объединяется с другими параметрами через символ амперсанда . Порядок параметров в строке запроса не имеет значения. Порядок имеет значение только в том случае, если параметры находятся слева от строки запроса (и, следовательно, являются частью самого URL-адреса). Любые настраиваемые части конечной точки, которые появляются перед строкой запроса, называются (разберем их позже).

Запросы и ответы содержат заголовки

При вводе адреса веб-сайта мы видим только текст ответа. Но на самом деле происходит гораздо больше процессов. Когда мы делаем запрос, мы отправляем заголовок запроса, который содержит информацию о запросе. Ответ также содержит заголовок ответа.

Для того чтобы увидеть заголовок ответа в запрос curl, добавим ключ :

Заголовок будет включен над телом ответа:

Чтобы в ответе получить только заголовок, используем ключ

Заголовок содержит метаданные ответа. Вся эта информация передается в браузер при запросе URL в нашем браузере (например, при просмотре веб-страницы в Интернете), но браузер не отображает эту информацию. Можно просмотреть информацию заголовка с помощью консоли Chrome Developer Tools, перейдя на вкладку .

Теперь давайте уточним метод. Метод GET (чтение) подразумевается по умолчанию, когда не указан другой метод, но мы сделаем это здесь явно с параметром -X:

При посещении веб-сайта мы отправляем запрос, используя метод GET. Существуют и другие методы HTTP, которые можно использовать при взаимодействии с REST API. Вот общие методы, используемые при работе с конечными точками REST:

HTTP метод Описание
POST Создание ресурса
GET Чтение (получение) ресурса
PUT Обновление ресурса
DELETE Удаление ресурса

Note: Метод GET используется по умолчанию в запросах curl. При использовании curl для выполнения запросов HTTP, отличных от GET, необходимо указывать нужный метод HTTP.

Пару слов о других полезных опциях cURL

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

Если на URL адресе есть HTTP аутентификация, то вы без труда можете воспользоваться следующим скриптом:

$url = "http://www.somesite.com/members/";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// указываем имя и пароль
curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword");

// если перенаправление разрешено 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
// то сохраним наши данные в cURL
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);

$output = curl_exec($ch);

curl_close($ch);

FTP загрузка

В PHP также существует библиотека для работы с FTP, но вам ничего не мешает и тут воспользоваться средствами cURL:

// открываем файл
$file = fopen("/path/to/file", "r");

// в url должно быть следующее содержание
$url = "ftp://username:password@mydomain.com:21/path/to/new/file";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize("/path/to/file"));

// указывам ASCII мод
curl_setopt($ch, CURLOPT_FTPASCII, 1);

$output = curl_exec($ch);
curl_close($ch);

Используем Прокси

Вы можете выполнить свой URL запрос через прокси:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,'http://www.example.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// указываем адрес
curl_setopt($ch, CURLOPT_PROXY, '11.11.11.11:8080');

// если необходимо предоставить имя пользователя и пароль
curl_setopt($ch, CURLOPT_PROXYUSERPWD,'user:pass');

$output = curl_exec($ch);

curl_close ($ch);

Функции обратного вызова

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

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,'http://net.tutsplus.com');

curl_setopt($ch, CURLOPT_WRITEFUNCTION,"progress_function");

curl_exec($ch);

curl_close ($ch);

function progress_function($ch,$str) {

    echo $str;
    return strlen($str);

}

Подобная функция ДОЛЖНА возвращать длину строки, что является обязательным требованием.

Curl и FTP

Утилита поддерживает FTP! Вы можете использовать её для загрузки файлов с удалённого сервера.

curl -u username:password -O ftp://sampleftpserver/testfile.tar.gz

В приведённой выше команде ftp://sampleftpserver — это FTP-сервер, который принимает соединения. Вы можете не указывать имя пользователя и пароль для анонимных FTP-соединений. Введите команду и посмотрите, как заполняется индикатор выполнения.

Вы также можете загружать файлы с помощью этой команды:

curl -u username:password -T testfile.tar.gz ftp://sampleftpserver

Опять же таки, мы можем пропустить имя пользователя и пароль для анонимных FTP-соединений.

What is curl?

curl, short for «Client for URLs», is a command line tool for transferring data using various protocols. This tool has applications in many household products such as tablets, printers, cars, routers, etc.

There are a vast amount of use-cases for curl, such as:

  • FTP upload
  • Proxy support
  • SSL connections
  • HTTP post

This tool also supports the use of all the following protocols: DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, and TFTP.

This guide will outline a few popular curl examples, along with a description of what each command does.

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; thus the string storage associated to the pointer argument may be overwritten 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.

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.

Что дальше

Эта статья лишь «скребет по поверхности» libcurl, учитывая огромное количество протоколов и языков, поддерживаемых библиотекой.
Но, надеюсь, она демонстрирует, как легко создавать приложения, использующие протоколы уровня приложений, такие как HTTP.
Web-сайт libcurl (см. раздел ) содержит большое количество примеров и значительный объем полезной документации.
Поэтому в следующий раз при разработке Web-браузера, спайдера или другого приложения, которому требуется протокол уровня приложения, попробуйте libcurl.
Это наверняка ускорит процесс разработки, и вы получите от него удовольствие.

Похожие темы

  • Оригинал статьи (EN).
  • cURL – инструмент на основе командной строки с библиотекой, реализующий многочисленные клиентские протоколы.
    Поддерживает более 12 протоколов, включая FTP, HTTP, Telnet, а также их защищенные варианты.
    cURL работает на нескольких платформах, включая Linux, AIX, BSD и Solaris, поддерживая более 30 языков.
  • PycURL – тонкая прослойка поверх libcurl API.
    Как тонкая прослойка, PycURL работает очень быстро.
    С помощью PycURL можно разрабатывать приложения на Python, использующие библиотеку libcurl.
  • Что касается гибкости приложений, то дополнительные сведения об интеграции возможностей сценариев в приложения можно почерпнуть в руководстве Scripting with Guile .
  • Следите за developerWorks в Твиттере.

Что делает bridge_server_1?

delay_server -p 4040
bridge_server_1 -p 8080 -P 4040
curl -4 -v "http://localhost:8080/data?year=2018&month=02&day=25"
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /data?year=2018&month=02&day=25 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Length: 111
< Server: RESTinio hello world server
< Date: Sat, 24 Feb 2018 10:15:41 GMT
< Content-Type: text/plain; charset=utf-8
<
Request processed.
Path: /data
Query: year=2018&month=02&day=25
Response:
===
Hello world!
Pause: 4376ms.

===
* Connection #0 to host localhost left intact
curl -4 -v "http://localhost:8080/data?year=2018&month=Feb&day=25"
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /data?year=2018&month=Feb&day=25 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Length: 81
< Server: RESTinio hello world server
< Date: Sat, 24 Feb 2018 10:19:55 GMT
< Content-Type: text/plain; charset=utf-8
<
Request failed.
Path: /data
Query: year=2018&month=Feb&day=25
Response code: 404
* Connection #0 to host localhost left intact

Одинарные и двойные кавычки в запросах curl на Windows

При использовании curl на Windows могут возникнуть проблемы с одинарными и двойными кавычками.

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

Вот обходной путь. Если нужно отправить содержимое тела в формате JSON, вы можете сохранить содержимое в файле JSON. Затем вы ссылаетесь на файл символом @, например:

Здесь curl будет искать в существующем каталоге файл . (Вы также можете указать полный путь к файлу JSON на вашем компьютере.)

Download Several URLs With ‘curl’

In its simplest form, download several URLs simultaneously by specifying them in sequence:

curl -O http://www.mysite.com/page1.html -O http://www.mysite.com/page2.html

To download a large number of files with a common naming pattern, use square brackets to supply a range. For example, to get image files suffixed 1 to 100, specify the following:

curl -O http://www.mysite.com/images/image.jpg

Use curly brackets to specify multiple sites with similar formats.

For example, to download the index pages for both www.google.com and www.bing.com, use the following command:

curl -O http://www.{google,bing}.com

Your shell may rewrite these commands as necessary. Learn more about regular expressions for relevant context.

Displaying Progress

By default, the curl command returns the following information as it downloads a URL:

  • Total %: Percent of the total transfer completed.
  • Total bytes: Total size of the transfer in bytes.
  • Received/Transferred %: Percentage of transfer completed.
  • Received/Transferred bytes: Number of bytes downloaded.
  • Average download speed: Download speed in bytes per second.
  • Average upload speed: Upload speed in bytes per second.
  • Total time: Estimated time to complete the current operation.
  • Time spent: Time passed since the start of the transfer.
  • Time left: Expected time to complete the transfer.
  • Current speed: Current transfer speed in bytes per second.

If you would prefer a simple progress bar, specify the -# switch as follows:

curl -# -O <URL>
Добавить комментарий

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

Adblock
detector