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

Истории и поддержка браузеров

Content Security Policy — это рекомендация рабочей группы W3C по безопасности веб-приложений. Версия 1 (или уровень 1) была предложена в 2012 году, Level 2  — в 2014 году, а Level 3 разрабатывается с 2015 года в качестве проекта. Хотя это всего лишь рекомендации, создатели браузеров быстро внедрили CSP, начиная с Firefox 4. Подавляющее большинство современных браузеров поддерживают все или почти все директивы , и в этой статье описывается уровень 2 CSP как фактический текущий стандарт.

Реализации CSP использовали 3 разных имени заголовка политики безопасности контента, в зависимости от браузера и времени принятия:

  • : Стандартное имя заголовка, рекомендованное W3C и используемое всеми современными реализациями (GoogleChrome начиная с версии 25, Firefox начиная с версии 23, Safari и другие браузеры на основе WebKit начиная с версии 528 WebKit). В настоящее время это единственный заголовок для использования.
  •  (устарел): Экспериментальный заголовок, используемый в прошлом Chrome и другими браузерами на основе WebKit.
  •  (устарел): Экспериментальный заголовок, используемый в прошлом браузерами на базе Gecko 2.

MingW32

Make sure that MinGW32’s bin dir is in the search path, for example:

then run in the root dir. There are other
make targets available to build libcurl with more features, use:

  • to build with Zlib support;
  • to build with SSL and Zlib enabled;
  • to build with SSH2, SSL, Zlib;
  • to build with SSH2, SSL, Zlib
    and SSPI support.

If you have any problems linking libraries or finding header files, be sure
to verify that the provided files use the proper paths, and
adjust as necessary. It is also possible to override these paths with
environment variables, for example:

It is also possible to build with other LDAP SDKs than MS LDAP; currently
it is possible to build with native Win32 OpenLDAP, or with the Novell CLDAP
SDK. If you want to use these you need to set these vars:

or for using the Novell SDK:

If you want to enable LDAPS support then set LDAPS=1.

Ответы 2

— это общедоступная версия нескольких ошибок, объединенных вместе. Если вы исчерпали лимит устранения неполадок, я бы порекомендовал открыть дело с помощью Поддержка DocuSign и предоставить идентификатор вашей демо-учетной записи, идентификатор пользователя, ключ интегратора и значение x-DocuSign-TraceToken ошибочного утверждения. Текстовая версия вашего утверждения также была бы полезна.

Вот несколько вещей, которые нужно проверить:

значение — должно быть точно (для демо) или для прода. Включение https:// или любого другого значения не удастся.

значение — должен быть активным идентификатором пользователя (в формате GUID) в соответствующем окружении.

значение — должно быть действительным идентификатором клиента

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

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

Комментарии (1)

Совет заключается в том, чтобы использовать библиотеку для создания JWT и преобразования его в токен доступа.

См. примеры JWT для примеров кода на многих языках. В примерах используется либо метод JWT из DocuSign SDK, либо библиотека JWT более низкого уровня.

  • С# .NET Core https://github.com/docusign/eg-01-csharp-jwt-core
  • С# .NET Framework https://github.com/docusign/eg-01-csharp-jwt-framework
  • PHP https://github.com/docusign/eg-01-php-jwt
  • Java https://github.com/docusign/eg-01-java-jwt
  • Node.js https://github.com/docusign/eg-01-node-jwt
  • Питон. https://github.com/docusign/eg-01-python-jwt
  • Руби https://github.com/docusign/eg-01-ruby-jwt

Инструкции по установке и настройке см. в файлах Readme репозиториев.

Комментарии (5)

Другие вопросы по теме

Встроенная и электронная подпись вместеПредварительно подписанный url для загрузки файла на docusignДобавление вложения конверта через restОшибка docusignapi при вызове updatenotificationsettings: {у пользователя отсутствует разрешение на доступ к ресурсуИнтеграция docusign rest api в облаке информатикиDocusign api для получения ответных (подписанных) документов из power formНевозможно прочитать значения вкладки привязки ни в статусе/конверте, возвращенном https://www.docusign.net/api/3.0/dsapi.asmxОшибка «требуется согласие» при использовании requestjwtusertokenЕсть ли api docusign java sdk для загрузки копии подписанного конверта?Указанная версия api недействительна docusign

Nonces и Hashes чтобы разрешить встроенные скрипты

Если вам абсолютно необходимо сделать исключение для некоторого унаследованного встроенного кода, который нельзя перенести в отдельный файл, CSP предоставляет две функции, позволяющие разрешать определенные блоки кода, не прибегая к unsafe-inline. Для внесения в белый список определенного фрагмента кода вы можете использовать nonce (одноразовый) номер (уникальный одноразовый идентификатор) для тега <script> или криптографический хеш для самого кода. Затем вы можете указать nonce или hash в вашей директиве script-src, чтобы разрешить этот фрагмент встроенного кода.</p>

По определению, nonce номер — это «число, используемое один раз», поэтому оно должен генерироваться случайным образом для каждой загрузки страницы. Чтобы использовать nonce номер сценария, укажите его в теге <script> с помощью атрибута nonce, а также добавьте его в директиву script-src, добавив к значению nonce-. Например, у вас может быть устаревший код:

Чтобы разрешить этот конкретный тег сценария, используйте:

Генерация nonce номера для каждой загрузки страницы может быть проблематичным, поэтому другой подход заключается в использовании криптографического хэша самого разрешенного кода. Для этого начните с вычисления хэша SHA для всех символов внутри тега <script> (но без самого тега). Затем вы можете указать значение хеша в директиве script-src, добавив к нему префикс sha256-, sha384- или sha512-, в зависимости от используемого алгоритма. Вот тот же пример, но без атрибута nonce:

Тогда директива, использующая хэш SHA256 этого кода:

IPConfig

Начиная с Windows NT, Microsoft представила новую команду под названием IPConfig, которая предназначена для того, чтобы позволить пользователям управлять и просматривать все сетевые данные компьютера Windows. Ниже приведены некоторые из наиболее часто используемых команд Ipconfig.

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

Flushdns может использоваться для очистки кэша DNS, который в свою очередь заставляет Windows получить новые записи DNS от провайдера.

Команда может быть использована для того, чтобы освободить IP-адреса, используемые конкретными приложениями путем прекращения всех активных соединений TCP/IP.
Хотя есть несколько платных и бесплатных приложений с графическим интерфейсом для утилит командной строки, описанных выше, эти встроенные команды покажут Вам всю основную информацию для устранения неполадок и позволят управлять сетевыми подключениями в Windows PC. Так же в этой статье рассмотрены далеко не все параметры и примеры использования команд. Здесь даны только самые наиболее используемые. Чтобы просмотреть полный список параметров и их описания просто введите имя команды, а через пробел символы «/?». Этот параметр выведет полную справку по используемой команде.

На этом Всё. Если у вас есть комментарии, то оставляйте их ниже, а также подписывайтесь на наши новости и оставайтесь с нами.

Скачать несколько URL с помощью ‘curl’

В простейшей форме загрузите несколько URL-адресов одновременно, указав их в последовательности:

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

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

Например, чтобы загрузить страницы индекса для www.google.com и www.bing.com, используйте следующую команду:

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

Submitting JSON data with cURL

In the previous section, we have seen how can submit POST requests using cURL. You can also submit JSON data using the  option. However, most servers expect to receive a POST request with key-value pairs, similar to the ones we have discussed previously. So, you need to add an additional header called ‘Content-Type: application/json’ so that the server understands it’s dealing with JSON data and handles it appropriately. Also, you don’t need to URL-encode data when submitting JSON.

So if you had the following JSON data and want to make a POST request to https://httpbin.org/post:

{
  "email": "",
  "name": 
}

Then, you can submit the data with:

curl --data '{"email":"", "name": }' -H 'Content-Type: application/json' https://httpbin.org/post

In this case, you can see the data appear under the  value in the httpbin.org output:

You can also save the JSON file, and submit it in the same way as we did previously:

curl --data @data.json https://httpbin.org/post

Что Вы можете сделать с помощью Ping

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

  • Ping URL (например, gu >

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

В приведенном выше списке используется внешний подход, когда Вы сначала отправляете запрос на самый удаленный пункт назначения, а затем прокладываете путь к более локальным устройствам. Некоторым людям нравится работать наоборот, сначала пинг loopback адреса, затем маршрутизатор (или другое локальное устройство), а затем интернет-адрес.

И, конечно, о чем мы говорим в этой статье, в основном относится к использованию ping для устранения неполадок в домашней или малой бизнес-сети. Кроме того, если Вам поручено устранять неполадки в крупных сетях, Вы, вероятно, уже знаете, как использовать пинг и многие другие сетевые инструменты.

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

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

Сначала давайте создадим файл для того, чтобы сформировать его и отправить файлу upload_output.php:

print_r($_FILES);

А вот и код скрипта, который выполняет указанный выше функционал:

$url = "http://localhost/upload_output.php";

$post_data = array (
    "foo" => "bar",
    // файл, который необходимо загрузить
    "upload" => "@C:/wamp/www/test.zip"
);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

$output = curl_exec($ch);

curl_close($ch);

echo $output;

Когда вы хотите загрузить файл, все, что вам нужно сделать, так это передать его как обычную post переменную, предварительно поместив перед ней символ @. При запуске написанного скрипта вы получите следующий результат:

FTP and Firewalls

The FTP protocol requires one of the involved parties to open a second connection as soon as data is about to get transferred. There are two ways to do this.

The default way for curl is to issue the PASV command which causes the server to open another port and await another connection performed by the client. This is good if the client is behind a firewall that does not allow incoming connections.

If the server, for example, is behind a firewall that does not allow connections on ports other than 21 (or if it just does not support the command), the other way to do it is to use the command and instruct the server to connect to the client on the given IP number and port (as parameters to the PORT command).

The flag to curl supports a few different options. Your machine may have several IP-addresses and/or network interfaces and curl allows you to select which of them to use. Default address can also be used:

Download with but use the IP address of our interface (this does not work on windows):

Download with but use 192.168.0.10 as our IP address to use:

Технология cURL

cURL — это технология, которая предназначена для передачи/получения данных посредстов URL. Технология cURL поддерживает такие распространенные протоколы, как HTTP, FTP, HTTPs и другие. Изначально cURL был инструментом командной строки, однако разработчики PHP не поленились и создали библиотеку в PHP, чем облегчили жизнь миллионам программистам. Давайте попробуем вместе разобраться с технологией cURL на примерах. Советую читать всё и по порядку.

Я знаю достаточно много примеров, где для получения сторонних web-страниц (парсеры) использовались совершенно другие способы, отличные от cURL. Например:

  • file_get_contents(«https://intop24.ru»);
  • file(«https://intop24.ru»);
  • readfile(«https://intop24.ru»);

Почему разработчики использовали их и что в них не так? А потому, что не знали, либо не хотели знать, что такое cURL. А не так в них то, что функционал ограничен: получили страницу и все на этом, в то время, как cURL может отправить форму на странице, получить ответ, обработать ошибку, начать всё заново и т.д.

Troubleshooting website issues with “cURL timing breakdown”

You may run into situations where a website is very slow for you, and you would like to dig deeper into the issue. You can make cURL display details of the request, such as the time taken for DNS resolution, establishing a connection etc. with the  option. This is often called as a cURL “timing breakdown”.

As an example, if you want to see these details for connecting to , run:

curl https://www.booleanworld.com/ -sSo /dev/null -w 'namelookup:\t%{time_namelookup}\nconnect:\t%{time_connect}\nappconnect:\t%{time_appconnect}\npretransfer:\t%{time_pretransfer}\nredirect:\t%{time_redirect}\nstarttransfer:\t%{time_starttransfer}\ntotal:\t\t%{time_total}\n'

(If you are running this from a Windows system, change the  to ).

You will get some output similar to this:

Each of these values is in seconds, and here is what each value represents:

  • namelookup — The time required for DNS resolution.
  • connect — The time required to establish the TCP connection.
  • appconnect — This is the time taken to establish connections for any layers between TCP and the application layer, such as SSL/TLS. In our case, the application layer is HTTP. Also, if there is no such intermediate layer (such as when there is a direct HTTP request), this time will always be 0.
  • pretransfer — This is the time taken from the start to when the transfer of the file is just about to begin.
  • redirect — This is the total time taken to process any redirects.
  • starttransfer — Time it took from the start to when the first byte is about to be transferred.
  • total — The total time taken for cURL to complete the entire process.

As an example, say, you are facing delays connecting to a website and you notice the “namelookup” value was too high. As this indicates a problem with your ISP’s DNS server, you may start looking into why the DNS lookup is so slow, and switch to another DNS server if needed.

Как происходит заражение вирусом CURL.EXE?

Мой братишка — заядлый геймер. Что ни зайду в гости — он постоянно во что-то рубится. Иногда я думаю, что ест, спит и справляет нужду — тоже возле компьютера. Играет просто во все, что движется. Онлайн, оффлайн…

В общем, скачивает он порядочное количество всякого интернет мусора, не обращая внимание на содержимое и безопасность установочного процесса. Все, что он инсталлирует — он инсталлирует по-умолчанию. Так же быстрее! Короче, я не был удивлен, когда вчера он пожаловался мне, что его комп ужасно тормозит и живет своей жизнью

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

Так что это за зловред такой — CURL.EXE? Обычный криптомайнер, который использует вашу машину в качестве генератора криптовалюты в пользу злоумышленника.

Имитация браузера через запросы cURL в PHP

Многие сайты защищаются от парсинга, отслеживая данные переменных user agent, referer, cookie. На сервере проверяются эти данные и, если подозрений на парсинг нет, то возвращается страница сайта.

Так как запросы curl в php данные этих переменных не передают, то такая защита от парсинга сайта вернет ошибку 404 или 500. Чтобы этого не происходило, можно сымитировать запрос страницы из браузера, добавив, например, следующие заголовки:

$headers = array(
'cache-control: max-age=0',
'upgrade-insecure-requests: 1',
'user-agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36',
'sec-fetch-user: ?1',
'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'x-compress: null',
'sec-fetch-site: none',
'sec-fetch-mode: navigate',
'accept-encoding: deflate, br',
'accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
);

$ch = curl_init('http://yandex.ru');
curl_setopt($ch, CURLOPT_COOKIEFILE, __DIR__ . '/cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, __DIR__ . '/cookie.txt');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, true);
$html = curl_exec($ch);
curl_close($ch);

echo $html;

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

User Agent

An HTTP request has the option to include information about the browser that generated the request. Curl allows it to be specified on the command line. It is especially useful to fool or trick stupid servers or CGI scripts that only accept certain browsers.

Example:

Other common strings:

  • — Netscape Version 3 for Windows 95
  • — Netscape Version 3 for Windows 95
  • — Netscape Version 2 for OS/2
  • — Netscape for AIX
  • — Netscape for Linux

Note that Internet Explorer tries hard to be compatible in every way:

Mozilla/4.0 (compatible; MSIE 4.01; Windows 95) — MSIE for W95

Mozilla is not the only possible User-Agent name:

  • — KDE File Manager desktop client
  • — Lynx command line browser

Почему curl?

Одним из преимуществ API REST является то, что вы можете использовать практически любой язык программирования для вызова конечной точки. Конечная точка — это просто ресурс, расположенный на веб-сервере по определенному пути.

Каждый язык программирования имеет свой способ совершать веб-вызовы. Вместо того, чтобы тратить силы, пытаясь показать, как совершать веб-вызовы на Java, Python, C ++, JavaScript, Ruby и т.д., можно просто использовать curl.

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

Как работать с cURL гораздо проще

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

$curl = new Curl();
$curl->get('https://www.example.com/search', );

Или так:

$curl = new Curl();
$curl->post('https://www.example.com/login/', );

К счастью, такая обертка уже написана и найти ее можно здесь: https://github.com/php-curl-class/php-curl-class

Просто установите ее при помощи:

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

TELNET

The curl telnet support is basic and easy to use. Curl passes all data passed to it on stdin to the remote server. Connect to a remote telnet server using a command line similar to:

And enter the data to pass to the server on stdin. The result will be sent to stdout or to the file you specify with .

You might want the / option to switch off the buffered output for slow connections or similar.

Pass options to the telnet protocol negotiation, by using the option. To tell the server we use a vt100 terminal, try something like:

Other interesting options for it include:

  • Sets the X display location.
  • Sets an environment variable.

NOTE: The telnet protocol does not specify any way to login with a specified user and password so curl cannot do that automatically. To do that, you need to track when the login prompt is received and send the username and password accordingly.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Basic авторизация

$url = 'https://example.com/auth.php';
$login = 'admin';
$password = 'password';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$login:$password");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$response = curl_exec($ch);
curl_close($ch);

print_r(json_decode($response, true));

Bearer авторизация

$url = 'https://example.com';
$version = 'v1';
$resource = 'users';

$headers = [
  'Content-Type: application/json',
  'Authorization: Bearer YOUR-TOKEN'
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, sprintf(
    "%s/%s/%s", $url, $version, $resource
));
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BEARER);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);

print_r(json_decode($response, true));

Proxy

curl supports both HTTP and SOCKS proxy servers, with optional authentication. It does not have special support for FTP proxy servers since there are no standards for those, but it can still be made to work with many of them. You can also use both HTTP and SOCKS proxies to transfer files to and from FTP servers.

Get an ftp file using an HTTP proxy named my-proxy that uses port 888:

Get a file from an HTTP server that requires user and password, using the same proxy as above:

Some proxies require special authentication. Specify by using -U as above:

A comma-separated list of hosts and domains which do not use the proxy can be specified as:

If the proxy is specified with instead of or , then curl will use HTTP/1.0 instead of HTTP/1.1 for any attempts.

curl also supports SOCKS4 and SOCKS5 proxies with and .

See also the environment variables Curl supports that offer further proxy control.

Most FTP proxy servers are set up to appear as a normal FTP server from the client’s perspective, with special commands to select the remote FTP server. curl supports the , and options that can be used to set up transfers through many FTP proxies. For example, a file can be uploaded to a remote FTP server using a Blue Coat FTP proxy with the options:

See the manual for your FTP proxy to determine the form it expects to set up transfers, and curl’s option to see exactly what curl is sending.

Команда lsof

означает “список открытых файлов” и безусловно относится к числу самых эффективных команд диагностики и устранения неполадок благодаря большому объему предоставляемой информации. 

Вывод открытых файлов, принадлежащих активным процессам 

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

Вводим в терминал, чтобы проверить ее в действии: 

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

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

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

Список файлов, открытых пользователем 

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

Большое количество открытых файлов несомненно вас удивит. Для ограничения числа получаемых результатов воспользуйтесь командой . 

Для демонстрации действия этой команды в фоновом режиме было запущено приложение Java. 

Извлечение вывода: 

Вывод процессов , использующих конкретный порт 

При необходимости вывести список всех запущенных на конкретном порту процессов, выполните следующую команду:

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

Обратите внимание, что аргумент выводит все прослушиваемые и установленные соединения. 

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

Обнаружить процесс также можно с помощью PID: 

Результат будет включать все процессы, принадлежащие PID. 

POST запросы cUrl в PHP

$array = array(
'login' => 'user',
'password' => '123'
);

$ch = curl_init('https://asgeto.ru');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $array);

// Или предать массив строкой:
// curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($array, '', '&'));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);
curl_close($ch);

echo $html;

Функция file_get_contents() так же умеет отправлять POST запросы. Для этого нужно использовать заголовки:

$headers = stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded' . PHP_EOL,
'content' => 'login=user&password=123',
),
));

echo file_get_contents('https://asgeto.ru', false, $headers);

Пример CURL – запрашиваем удаленную страницу для вывода на экран

В данном примере мы просто запросим удаленную страницу по протоколу HTTP методом GET и выведем ее содержимое на экран.

У нас имеется каталог test в нем 2 PHP файла это test_curl.php и test.php, где test_curl.php и есть скрипт где мы будем использовать curl, а test.php удаленный скрипт который мы будем вызывать. Код я подробно прокомментировал.

Код test_curl.php

<?PHP
        //Инициализирует сеанс
        $connection = curl_init();
        //Устанавливаем адрес для подключения, по умолчанию методом GET
        curl_setopt($connection, CURLOPT_URL, "http://localhost/test/test.php?id=1");
        //Выполняем запрос
        curl_exec($connection);
        //Завершает сеанс
        curl_close($connection);
?>

Код test.php

<?PHP
        //Принимаем методом GET
        if (isset($_GET)){
                $id = (int)$_GET;
                //Выводим строку на основе id
                switch($id){
                                case 1:
                                        echo "<Н1>Заголовок 1</Н1>";
                                        break;
                                case 2:
                                        echo "<Н2>Заголовок 2</Н2>";
                                        break;
                                case 3:
                                        echo "<Н3>Заголовок 3</Н3>";
                                        break;                                  
                }               
        }
?>

В итоге если вы запустите test_curl.php у Вас выведется на экран надпись «Заголовок 1», можете поэкспериментировать с передачей параметров id (в данном случае 2 или 3).

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Люкс-хост
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: