GuzzleHttp и CURLOPT_PROXY


Содержание

Guzzle HTTP клиент — быстрый старт

Навигация по статье:

Guzzle

Guzzle — это PHP-HTTP-клиент, который упрощает отправку HTTP-запросов и интеграцию с веб-сервисами. Guzzle может отправлять как синхронные, так и асинхронные запросы, используя один и тот же интерфейс. Среди его плюсов: простой интерфейс работы со строкой запросов, использование HTTP-кук (cookies), загрузка данных. Если вы не хотите сами настраивать POST или GET запросы через cURL, то библиотека Guzzle как раз для вас.

Будем использовать Guzzle 6. Именно в этой версии есть поддержка стандарта PSR-7 — HTTP Message Interface

Установка Guzzle HTTP-клиент

Рекомендуемый способ установки Guzzle — с помощью Composer. В файле composer.json

Или из консоли (терминала):

Если нужна последняя нестабильная версия пакета:

После установки вам понадобится автозагрузчик Composer:

Создание клиента

Можно делать запросы в Guzzle, используя объект GuzzleHttp\ClientInterface :

Клиент является неизменными в Guzzle 6, что означает, что вы не можете изменить значения по умолчанию, используемые клиентом после его создания.

Конструктор клиента принимает ассоциативный массив опций:

(string|UriInterface) Базовый URI клиента, который объединен в относительные URI. Может быть строкой или экземпляром UriInterface. Когда клиенту предоставляется относительный URI, клиент объединяет базовый URI с относительным URI, используя правила, описанные в RFC 3986, section 2.

Не хочется читать RFC 3986 ? Вот несколько быстрых примеров того, как base_uri разрешается с другим URI:

base_uri URI Результат
http://foo.com /bar http://foo.com/bar
http://foo.com/foo /bar http://foo.com/bar
http://foo.com/foo bar http://foo.com/bar
http://foo.com/foo/ bar http://foo.com/foo/bar
http://foo.com http://baz.com http://baz.com
http://foo.com/?bar bar http://foo.com/bar

(callable) Функция, которая передает HTTP-запросы по сети. Функция вызывается с Psr7\Http\Message\RequestInterface и массив опций передачи, и должен возвращать GuzzleHttp\Promise\PromiseInterface который выполняется с Psr7\Http\Message\ResponseInterface в случае успеха. handler это опция только для конструктора, которая не может быть переопределена в параметрах per/request .

(mixed) Все остальные параметры, передаваемые конструктору, используются в качестве параметров запроса по умолчанию для каждого запроса, создаваемого клиентом.

Отправка запросов

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

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

Клиентские объекты обеспечивают большую гибкость в том, как передаются запросы, включая параметры запроса по умолчанию, промежуточное программное обеспечение стека обработчиков по умолчанию, которое используется каждым запросом, и базовый URI, который позволяет отправлять запросы с относительными URI.

Асинхронные запросы

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

Вы также можете использовать методы sendAsync() и requestAsync() клиента:

$promise , возвращаемые этими методами, реализуют Promises/A+ spec, предоставленные библиотекой Guzzle promises. Это означает, что вы сможете связать цепочкой then() вызовы promise . Эти then затем реализуют либо успешный результат с помощью Psr\Http\Message\ResponseInterface , либо запрос отклоняется с выбросом исключения exception :

Параллельные запросы

Вы можете отправлять несколько запросов одновременно, используя Promise и асинхронные запросы:

Можно использовать GuzzleHttp\Pool объект, когда у вас есть неопределенное количество запросов, которые вы хотите отправить:

Или используя замыкание, которое вернет promise, как только пул вызовет замыкание:

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

В предыдущих примерах мы получили $response или мы получили ответ от promise . Объект ответа реализует ответ PSR-7, Psr\Http\Message\ResponseInterface , и содержит много полезной информации.

Вы можете получить код состояния и фразу ответа:

Вы можете извлечь заголовки из ответа:

Тело ответа может быть получено с помощью метода getBody() . Тело ответа может быть использовано как строка, приведено к строке или как объект, подобный потоку:

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

Вы можете предоставить параметры строки запроса несколькими способами. Можно установить параметры строки запроса в URI запроса:

Можно указать параметры строки запроса, используя query как массив:

Предоставление опции в качестве массива будет использовать нативную функцию PHP http_build_query для форматирования строки с параметрами.

И, наконец, можно предоставить query в роли строки:

Загрузка данных

Guzzle предоставляет несколько способов загрузки данных.

Можно отправлять запросы, содержащие поток данных, передавая строку, ресурс возвращается из fopen , или как экземпляр Psr\Http\Message\StreamInterface в опцию запроса body :

Простой способ загрузить данные JSON и установить соответствующий заголовок — использовать опцию запроса json :

POST/Form запросы

В дополнение к указанию необработанных данных запроса с использованием опции запроса body , Guzzle предоставляет полезные абстракции при отправке данных POST .

Отправка полей формы

Для отправки POST-запросов application/x-www-form-urlencoded необходимо указать поля POST в виде массива в параметрах запроса form_params :

Отправка файлов форм

Можно отправлять файлы вместе с формой (POST-запросы multipart/form-data ), используя опцию запроса multipart . Она принимает массив ассоциативных массивов, где каждый ассоциативный массив содержит следующие ключи:

  • name : (required, string) имя ключа поля формы.
  • contents : (required, mixed) Укажите тут строку для отправки содержимого файла в виде строки, предоставьте ресурс fopen для потоковой передачи содержимого из потока PHP или укажите Psr\Http\Message\StreamInterface для потоковой передачи содержимого из потока PSR-7.

Cookies

Guzzle может поддерживать для вас сеанс файлов cookie, если это указано с помощью параметра запроса файлов cookie. При отправке запроса параметр cookie должен быть установлен на экземпляр GuzzleHttp\Cookie\CookieJarInterface :

Можно установить для cookie значение true в конструкторе клиента, если хотите использовать общий файл cookie для всех запросов:

Редиректы (перенаправления)

Guzzle будет автоматически следовать за редиректами, только если чётко не указать этого не делать. Вы можете настроить поведение перенаправления, используя опцию запроса allow_redirects :

  • Установите значение true , чтобы включить нормальные перенаправления с максимальным количеством 5 перенаправлений. Это значение по умолчанию.
  • Установите в false , чтобы отключить перенаправления.
  • Передайте ассоциативный массив, содержащий ключ max , чтобы указать максимальное количество перенаправлений, и при необходимости укажите значение ключа strict , чтобы указать, следует ли использовать строгие перенаправления, совместимые с RFC (что означает запросы перенаправления POST со следующими запросами тоже типа POST, тогда как в обычном режиме большинство браузеров по умолчанию перенаправляют запросы POST со следующими запросами GET)./li>

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

Исключения при обработке ошибок

Guzzle генерирует исключения для ошибок, возникающих во время передачи:

В случае сетевой ошибки (тайм-аут соединения, ошибки DNS и т.д.) выдается сообщение GuzzleHttp\Exception\RequestException . Это исключение распространяется на GuzzleHttp\Exception\TransferException . Поймав это исключение, вы поймете любое исключение, которое может быть сгенерировано при передаче запросов.

Исключение GuzzleHttp\Exception\ConnectException выдается в случае сетевой ошибки. Это исключение происходит от GuzzleHttp\Exception\RequestException . GuzzleHttp\Exception\ClientException выбрасывается для ошибок уровня 400, если для параметра запроса http_errors установлено значение true . Это исключение распространяется на GuzzleHttp\Exception\BadResponseException и GuzzleHttp\Exception\BadResponseException распространяется на GuzzleHttp\Exception\RequestException .

GuzzleHttp\Exception\ServerException генерируется для ошибок уровня 500, если для параметра запроса http_errors установлено значение true . Это исключение происходит от GuzzleHttp\Exception\BadResponseException .

GuzzleHttp\Exception\TooManyRedirectsException генерируется, когда выполняется слишком много перенаправлений. Это исключение происходит от GuzzleHttp\Exception\RequestException .

Все вышеперечисленные исключения происходят из GuzzleHttp\Exception\TransferException .

Переменные окружения

Guzzle предоставляет несколько переменных среды, которые можно использовать для настройки поведения библиотеки:

GUZZLE_CURL_SELECT_TIMEOUT

Управляет продолжительностью в секундах, которую обработчик curl_multi_* будет использовать при выборе обработчика curl , используя curl_multi_select() . Некоторые системы имеют проблемы с реализацией PHP curl_multi_select() , где вызов этой функции всегда приводит к ожиданию максимальной продолжительности времени ожидания.

HTTP_PROXY

Определяет прокси для использования при отправке запросов по протоколу http .

Поскольку переменная HTTP_PROXY может содержать произвольный пользовательский ввод в некоторых (CGI) средах, эта переменная используется только в CLI SAPI. Смотрите https://httpoxy.org для получения дополнительной информации.

HTTPS_PROXY

Определяет прокси для использования при отправке запросов по протоколу https .

GuzzleHttp и CURLOPT_PROXY

подскажите как мне использовать прокси через curl если я не знаю тип прокси?

подскажите как мне использовать прокси через curl если я не знаю тип прокси?
.
и знай какой применить

CURLOPT_PROXYTYPE
Либо CURLPROXY_HTTP (по умолчанию), либо CURLPROXY_SOCKS4, CURLPROXY_SOCKS5, CURLPROXY_SOCKS4A или CURLPROXY_SOCKS5_HOSTNAME.
Добавлен в версии cURL 7.10.

05.03.2020, 17:30 #2
05.03.2020, 17:50 #3
05.03.2020, 19:52 #4
так я не знаю какой у меня тип прокси.

05.03.2020, 22:06 #5

Можно попробовать написать простую функцию опираясь на порты делать предположение какой прокси.

Скажем так порт 9051
Шаг первый. Судя по порту это Socks5 — Нет
Тогда вероятно это Socks4 — Нет
Странно. Остается только HTTP — и тут нет

Вывод, прокси невалидный берем другой

http обычно 80 81 8080 8090 и тд, можно несколько из-за таких условий сократить время проверок. Для особо умных — нейронку запилить и угадывать по базе портов какой. Еще лучше, обучаться и угадывать.

06.03.2020, 03:03 #6
function curl_get_contents_partial($url, $limit) <
$writefn = function($ch, $chunk) use ($limit, &$datadump) <
static $data = »;

$len = strlen($data) + strlen($chunk);
if ($len >= $limit) <
$data .= substr($chunk, 0, $limit — strlen($data));
$datadump = $data;
return -1;
>
$data .= $chunk;
return strlen($chunk);
>;

CURLOPT_PROXY explained

CURLOPT_PROXY — set proxy to use

SYNOPSIS

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY, char *proxy);

DESCRIPTION

Set the proxy to use for the upcoming request. The parameter should be a char * to a zero terminated string holding the host name or dotted numerical IP address. A numerical IPv6 address must be written within [brackets].

To specify port number in this string, append :[port] to the end of the host name. The proxy’s port number may optionally be specified with the separate option CURLOPT_PROXYPORT. If not specified, libcurl will default to using port 1080 for proxies.

The proxy string may be prefixed with [scheme]:// to specify which kind of proxy is used.

HTTP Proxy. Default when no scheme or proxy type is specified.

HTTPS Proxy. (Added in 7.52.0 for OpenSSL, GnuTLS and NSS)

SOCKS4a Proxy. Proxy resolves URL hostname.

SOCKS5 Proxy. Proxy resolves URL hostname.

Without a scheme prefix, CURLOPT_PROXYTYPE can be used to specify which kind of proxy the string >When you tell the library to use an HTTP proxy, libcurl will transparently convert operations to HTTP even if you specify an FTP URL etc. This may have an impact on what other features of the library you can use, such as CURLOPT_QUOTE and similar FTP specifics that don’t work unless you tunnel through the HTTP proxy. Such tunneling is activated with CURLOPT_HTTPPROXYTUNNEL.

Setting the proxy string to «» (an empty string) will explicitly disable the use of a proxy, even if there is an environment variable set for it.

A proxy host string can also include protocol scheme (http://) and embedded user + password.

The application does not have to keep the string around after setting this option.

Environment variables

libcurl respects the proxy environment variables named http_proxy , ftp_proxy , sftp_proxy etc. If set, libcurl will use the specified proxy for that URL scheme. So for a «FTP://» URL, the ftp_proxy is cons >all_proxy is used if no protocol specific proxy was set.

If no_proxy (or NO_PROXY ) is set, it is the exact equivalent of setting the CURLOPT_NOPROXY option.

The CURLOPT_PROXY and CURLOPT_NOPROXY options overr >Default is NULL, meaning no proxy is used.

When you set a host name to use, do not assume that there’s any particular single port number used w >All except file://. Note that some protocols don’t do very well over proxy.

EXAMPLE

AVAILABILITY

Since 7.14.1 the proxy environment variable names can include the protocol scheme.

Since 7.21.7 the proxy string supports the socks protocols as «schemes».

Since 7.50.2, unsupported schemes in proxy strings cause libcurl to return error.

RETURN VALUE

Returns CURLE_OK if proxies are supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space.

The Guzzle HTTP client¶

Guzzle gives PHP developers complete control over HTTP requests while utilizing HTTP/1.1 best practices. Guzzle’s HTTP functionality is a robust framework built on top of the PHP libcurl bindings.

The three main parts of the Guzzle HTTP client are:

Clients Guzzle\Http\Client (creates and sends requests, associates a response with a request)
Requests Guzzle\Http\Message\Request (requests with no body), Guzzle\Http\Message\EntityEnclosingRequest (requests with a body)
Responses Guzzle\Http\Message\Response

Creating a Client¶

Clients create requests, send requests, and set responses on a request object. When instantiating a client object, you can pass an optional «base URL» and optional array of configuration options. A base URL is a URI template that contains the URL of a remote server. When creating requests with a relative URL, the base URL of a client will be merged into the request’s URL.

Base URLs¶

Notice that the URL prov > get() method is relative. Relative URLs will always merge into the base URL of the client. There are a few rules that control how the URLs are merged.

Guzzle follows RFC 3986 when merging base URLs and relative URLs.

In the above example, we passed /user to the get() method of the client. This is a relative URL, so it will merge into the base URL of the client— resulting in the derived URL of https://api.github.com/users .

/user is a relative URL but uses an absolute path because it contains the leading slash. Absolute paths will overwrite any existing path of the base URL. If an absolute path is prov > /path/to/something ), then the path specified in the base URL of the client will be replaced with the absolute path, and the query string provided by the relative URL will replace the query string of the base URL.

Omitting the leading slash and using relative paths will add to the path of the base URL of the client. So using a client base URL of https://api.twitter.com/v1.1 and creating a GET request with statuses/user_timeline.json will result in a URL of https://api.twitter.com/v1.1/statuses/user_timeline.json . If a relative path and a query string are provided, then the relative path will be appended to the base URL path, and the query string provided will be merged into the query string of the base URL.

If an absolute URL is prov > http://httpbin.org/ip ), then the request will completely use the absolute URL as-is without merging in any of the URL parts specified in the base URL.

Configuration options¶

The second argument of the client’s constructor is an array of configuration data. This can include URI template data or special options that alter the client’s behavior:

Set to true to use the Guzzle bundled SSL certificate bundle (this is used by default, ‘system’ to use the bundle on your system, a string pointing to a file to use a specific certificate file, a string pointing to a directory to use multiple certificates, or false to disable SSL validation (not recommended).

When using Guzzle inside of a phar file, the bundled SSL certificate will be extracted to your system’s temp folder, and each time a client is created an MD5 check will be performed to ensure the integrity of the certificate.

request.options Associative array of Request options to apply to every request created by the client.
redirect.disable Disable HTTP redirects for every request created by the client.
curl.options Associative array of cURL options to apply to every request created by the client. if either the key or value of an entry in the array is a string, Guzzle will attempt to find a matching defined cURL constant automatically (e.g. «CURLOPT_PROXY» will be converted to the constant CURLOPT_PROXY ).
ssl.certificate_authority
command.params When using a Guzzle\Service\Client object, this is an associative array of default options to set on each command created by the client.

Here’s an example showing how to set various configuration options, including default headers to send with each request, default query string parameters to add to each request, a default auth scheme for each request, and a proxy to use for each request. Values can be injected into the client’s base URL using variables from the configuration array.

Setting a custom User-Agent¶

The default Guzzle User-Agent header is Guzzle/ curl/ PHP/

. You can customize the User-Agent header of a client by calling the setUserAgent() method of a Client object.

Использование HTTP proxy и SOCKS в Linux

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

curl: передача данных через proxy

curl имеет полноценную поддержку как HTTP proxy так и SOCKS.

Для тестирования возможно использовать proxy сервера из бесплатных списков (socks — sockslist.net, и HTTP proxy — proxyhttp.net). Проверка IP адреса будет производиться с помощью ресурса check-host.net

Часть параметров curl можно записать в файл

С помощью time и curl также можно замерить время отклика сервера:

Результат будет выглядеть так:

wget: закачка файлов через proxy

wget имеет встроенную поддержку proxy. Недостаток лишь в том, что только поддержку HTTP proxy. Для использования совместно с SOCKS рекомендуется использовать соксификатор dante.

Чтобы все время не указывать —proxy-user и —proxy-password можно их прописать в файл

ssh: доступ к серверам

Для доступа к серверам через ssh и proxy также лучше использовать соксификатор dante.

Соксификатор dante

С помощью socksify можно направить через proxy почти любое приложение, не только консольное.

Чтобы все время не вводить данные о proxy можно создать файл /etc/socks.conf
Пример для SOCKS:

Пример для HTTP proxy с авторизацией:

А также экспортировать переменные SOCKS_USERNAME и SOCKS_PASSWORD, если для SOCKS или HTTP proxy требуется авторизация:

DNS запросы через proxy

Часто требуется чтобы и преобразование имен происходило через proxy. Если использовать dante, то запрос на преобразование имен идет и через proxy, и через именной сервер указанный в /etc/resolv.conf . Понять почему же идет два одинаковых запроса вместо одного не удалось. Поэтому можно предложить два варианта:
1) Закомментировать именные сервера в файле /etc/resolv.conf, чтобы преобразование имен шло только через proxy. Это отразится на всей системе.
2) Изменить /etc/resolv.conf и выставить именные сервера необходимой страны, или просто отличные от серверов провайдера. Например установить сервера Google:

Чтобы данные не были перезаписаны именными серверами провайдера (при переподключении), можно запретить обновление списка именных серверов сетевому менеджеру (NetworkManager/wicd) или DHCP-клиенту (спасибо ergil за корректировку).

Или воспользоваться «грубым» методом — запрещением изменения файла /etc/resolv.conf:

Если есть какие-то дополнения, пожалуйста, напишите, это будет полезно узнать и применить.

varenich

Метания по жизни

http://www.sozdaniestranic.ru

Все опции curl, касающиеся работы с прокси:


CURLOPT_HTTPPROXYTUNNEL TRUE to tunnel through a given HTTP proxy.

CURLOPT_PROXYAUTH The HTTP authentication method(s) to use for the proxy connection. Use the same bitmasks as described in CURLOPT_HTTPAUTH. For proxy authentication, only CURLAUTH_BASIC and CURLAUTH_NTLM are currently supported. Added in CURL 7.10.7 and PHP 5.1.0.

CURLOPT_PROXYPORT The port number of the proxy to connect to. This port number can also be set in CURLOPT_PROXY. Added in PHP 5.0.0.

CURLOPT_PROXYTYPE Either CURLPROXY_HTTP (default) or CURLPROXY_SOCKS5.

CURLOPT_PROXY The HTTP proxy to tunnel requests through.

CURLOPT_PROXYUSERPWD A username and password formatted as «[username]:[password]» to use for the connection to the proxy.

GuzzleHttp и CURLOPT_PROXY

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYTYPE, long type);

DESCRIPTION

If you set CURLOPT_PROXYTYPE(3) to CURLPROXY_HTTP_1_0, it will only affect how libcurl speaks to a proxy when CONNECT is used. The HTTP version used for «regular» HTTP requests is instead controlled with CURLOPT_HTTP_VERSION(3).

Often it is more convenient to specify the proxy type with the scheme part of the CURLOPT_PROXY(3) string.

Guzzle Proxy Issue

I have strange issues with Guzzle. It seems to have baked our company proxy somewhere and I cannot get rid of it, so not able to make any request if outside the company network.

I tried unsetting environment variables, overwriting proxy in request using empty strings or open web proxies, excluding the domain from proxy usage, . I dont know what else to try.

Could someone specify where Guzzle gets its proxy information from and how to disable that? Even if I overwrite the proxy the error message still says «cURL error 5: Could not resolve proxy: (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)» and also disabling the 2 lines with CURLOPT_PROXY in CurlHandler doesnt help. Caching is set to array btw.

Would be really curious what the cause of my issue could be!

Please sign in or create an account to participate in this conversation.

The most concise screencasts for the working developer, updated daily.

There’s no shortage of content at Laracasts. In fact, you could watch nonstop for days upon days, and still not see everything!

Want us to email you occasionally with Laracasts news?

Nine out of ten doctors recommend Laracasts over competing brands. Come inside, see for yourself, and massively level up your development skills in the process.

Learn
Discuss
Extras

© Laracasts 2020. All rights reserved.
Yes, all of them. That means you, Todd.

Designed with by Tuds.
Proudly hosted with Laravel Forge and DigitalOcean.

Команда curl. Синтаксис. Примеры использования

Сurl – утилита командной строки для скачивания и загрузки данных. Она выросла из проекта шведского программиста Даниэля Стенберга. Изначально в середине 90-х, на заре развития Интернета, он разрабатывал бота, который должен был загружать с веб-страницы курсы валют и сообщать пользователям IRC эквивалент шведских крон в долларах США. Со временем проект развивался, появлялась поддержка различных протоколов и новые функции. Теперь curl используется для передачи любых данных и ряда других полезных задач. Рассмотрим основные моменты работы с этим инструментом.

Синтаксис и опции curl

Синтаксис команды следующий:

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

-# — отображать простой прогресс-бар во время загрузки;
-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

Опция -V или —version выводит не только версию curl, но и краткую информацию о поддерживаемых протоколах и функциях:

Скачивание файла

Если вам требуется скачать файл, запустите curl с опцией –O или –o. Первая из них сохраняет файл в текущей рабочей директории под тем же именем, что и в удаленном месторасположении. Вторая опция позволяет вам указать другое имя и/или место для скачивания.

Cохранение файла под исходным именем (yourfile) в текущей рабочей директории.

Cохранение файла под именем newfile в директории /tmp/examplе/.

Возобновление прерванной загрузки

Если скачивание по какой-то причине было прервано (например, пользователь нажал Ctrl+C), вы легко можете возобновить его с момента остановки при помощи опции -C – (дефис, С, тире):

Скачивание нескольких файлов

Следующая команда позволит вам скачать info.html с http://yoursite.com и about.html c http://mysite.com в один прием:

Если использовать curl вместе с командой xargs, можно скачивать файлы в соответствии со списком URL, заданном в файле (в данном примере listurls.txt):

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

Если вы подключены через прокси-сервер, нужно указать его команде curl при помощи следующих опций (в данном примере имя сервера proxy.yourdomain.com, порт 8080, имя пользователя user, пароль qwerty1234):

Если ваш прокси-сервер не требует аутентификации, опцию -U user:qwerty1234 указывать не нужно.

Запрос HTTP-заголовков

HTTP-заголовки позволяют удаленному веб-серверу помимо ответа на сам запрос отправлять дополнительную информацию. Она предоставляет клиенту данные о том, как обрабатывать ответ:

Для запроса HTTP-заголовков веб-сайта выполните команду с опцией -I:

$ curl -I https://itproffi.ru

Также эту информацию можно получить, воспользовавшись функциями браузера для разработчиков.

cURL POST-запросы с параметрами

Следующая команда отправит на https://yourdomain.com/info.php параметры firstName и lastName с соответствующими значениями:

Этим приемом можно пользоваться для симуляции работы обычных веб-форм.

Следующая команда скачивает в текущую рабочую директорию файл yourfile с удаленного FTP-сервера ftp://yourftpserver (имя пользователя user, пароль qwerty1234):

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

Загрузка файлов на FTP-сервер

Для загрузки локального файла mylocalfile.tar.gz воспользуйтесь следующей командой:

Указание агента пользователя

Агент пользователя – часть информации HTTP-запроса. Она показывает, каким браузером пользуется клиент. Можно посмотреть, что имеющаяся версия curl передает по умолчанию и установить новое значение:

Хотите посмотреть, какие файлы cookie скачиваются на ваш компьютер, когда вы заходите на определенный сайт? Опция —cookie-jar сохраняет их список в файл, который в дальнейшем можно просмотреть при помощи команды cat.

Полученные в предыдущем примере файлы cookie можно использовать в дальнейших запросах к тому же самому сайту:

Изменение разрешения имен

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

Таким образом, при запросе на http://www.yourdomain.com curl будет запрашивать сайт с локального узла, а не использовать DNS или файл /etc/hosts.

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

Чтобы curl не занимал всю пропускную способность канала, можно ограничить скорость скачивания при помощи опции —limit-rate:

Заключение

Мы рассмотрели краткую историю появления curl и наиболее характерные примеры применения этой команды. Для более подробной информации можно обратиться к соответствующей man-странице.

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

CURL proxy

Прокси в целом используется для того чтобы скрыть собственный адрес и обойти всевозможные блокировки — корпоративные firewall и блокировки на уровне провайдера.

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

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

Проксирующие сервера могут быть публичными и не требовать авторизации или же запрашивать валидные логин и пароль

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

123.123.123.123 здесь — адрес прокси сервера, 20203 — порт, обращение идет к хосту ya.ru

Если прокси требует авторизации (например, он корпоративный), то с ключем -U указывается логин, через двоеточие после него пароль.

curl —proxy 123.123.123.123:8123 -U username:password ya.ru

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

Задержки происходят и если настроить прокси в браузере. Особенно явно с Tor, для которого маршрут всегда строится с использованием минимум трех удаленных друга от друга узлов.

Читайте про то как настроить собственный Proxy сервер на основе пакета Squid

Цукерберг рекомендует:  C#) - Реализация классов в c#
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих