Что такое curl. как работает команда curl: определение и примеры

7 ответов

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

попробуйте следующий эксперимент в клиенте командной строки mysql:

. показывает 28800 (т. е. 8 часов), что по умолчанию wait_timout .

затем вы можно выйти из сеанса, повторно подключиться и снова по умолчанию wait_timeout – это 28800. Поэтому он ограничен рамками текущей сессии.

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

вы должны установить следующие переменные в вашем my.conf :

wait_timeout таймаут для автоматизированные соединения (на мой взгляд более, чем 30 на веб-сервере слишком много). interactive_timeout – это время ожидания взаимодействия консоли для холостого хода сессии.

другая возможность: MySQL поддерживает две разные переменные таймаута, wait_timeout для неинтерактивных клиентов, и interactive_timeout для интерактивных клиентов.

разница между интерактивными и неинтерактивными клиентами, кажется, просто ли вы указали при подключении.

Я не знаю, поможет ли это вам, потому что вам нужно как-то сделать mysql_real_connect() передайте эту опцию в свой

Если вы используете Разъем / J, вы можете использовать sessionVariables в URL JDBC клиента так: jdbc:mysql://hostname:3306/schema?sessionVariables=wait_timeout=600

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

Я проверил mysql.user таблица, и не похоже, что для нее есть настройка:

в зависимости от того, используете ли вы MySQLi или PDO, ваши соединения PHP MySQL должны либо зависать, когда запрос делает, либо совместно использоваться в пуле для процесса Apache.

например, с PDO, чтобы отключить постоянные соединения (я думаю, что это значение по умолчанию), подключитесь к своей БД с помощью:

$ПДО = Новый из PDO($DSN и пользователя $user, $передать, Array (PDO:: ATTR_PERSISTENT = > false));

если вы хотите, чтобы ваши скрипты использовали постоянные соединения, но у вас слишком много соединений, открытых для вашей базы данных в спящем режиме, вы должны подумать о настройке Apache MaxServers , MaxSpareServers , MinSpareServers и StartServers так что не так много торчать, когда они не нужны.

можно убить соединения на пользователя с помощью pt-kill. Вы можете запланировать это или настроить фоновое задание для обработки этого.

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

Обратите внимание, что init_connect не будет выполняться для суперпользователя

Команда Curl для Работы с Файлами

Команды Curl могут загружать файлы из удалённой локации. Есть два способа это сделать:

  • -O сохранит файл в текущем рабочем каталоге с тем же именем, что и у удалённого;
  • -o позволяет указать другое имя файла или местоположение.

Вот пример:

curl -O http://testdomain.com/testfile.tar.gz

Приведённая выше команда сохранит файл как testfile.tar.gz.

curl -o newtestfile.tar.gz http://testdomain.com/testfile.tar.gz

А эта команда сохранит его как newtestfile.tar.gz.

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

curl -C – -O  http://testdomain.com/testfile.tar.gz

Curl также позволяет загрузить несколько файлов одновременно. Пример:

curl -O http://testdomain.com/testfile.tar.gz -O http://mydomain.com/myfile.tar.gz

Если вы хотите загрузить несколько файлов с нескольких URL, перечислите их все в файле. Команды Curl могут быть объединены с xargs для загрузки различных URL-адресов.

Например, если у нас есть файл allUrls.txt, который содержит список всех URL-адресов для загрузки, то приведённый ниже пример выполнит загрузку всех файлов с этих URL.

xargs –n 1 curl -O < allUrls.txt

Тайм-аут операции: что делать? Простейший способ исправления ситуации

Как
считается, наиболее простым способом, позволяющим избавиться от ошибки
118, является обычное закрытие не отвечающей страницы и ее повторное
открытие по истечении минут десяти. Иногда может потребоваться закрыть и
перезапустить сам интернет-браузер (часто такие ситуации почему-то
наблюдаются в Google Chrome и других браузерах на его основе).

Если
такой вариант не помогает, а сообщение «Ошибка: Тайм-аут операции…»
выдается снова, можно применить обычную перезагрузку компьютера или
ноутбука (а лучше и всех маршрутизаторов типа роутеров или
ADSL-модемов).

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

3 ответа

Трек 1

Согласно Javadocs Httpclient, похоже, не имеет значения по умолчанию времени ожидания Socket. Чтобы ответить на вопрос в вашем обновлении — тайм-аут сеанса здесь не будет действовать. По умолчанию Weblogic составляет 30 минут для тайм-аута сессии.

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

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

В некоторых ссылках указано, что это значение по умолчанию составляет 60 секунд, но javadocs ничего не говорит, в любом случае вы можете установить это значение примерно на 120 секунд, чтобы посмотреть, поможет ли это

Вам нужно рассчитать время ожидания — если это ясно. Значение: появляются ли эти ошибки через 30, 60 или 5 минут после исходящего запроса?

Я бы изменил SO_Timeout и повторил попытку

Дорожка 2 — параметры ОС

Существуют рекомендуемые параметры BEA для значений NDD, которые определяют, как долго входящие соединения остаются открытыми, сколько в очереди и так далее. На Солярисе их можно получить, запустив

Можете ли вы проверить документы Oracle на наличие эквивалентных команд в Linux и определить, на какие значения они должны быть установлены. Что касается Solaris, то, по моему опыту, значений по умолчанию недостаточно, и их необходимо использовать в соответствии с рекомендациями BEA (Oracle)

Дорожка 3: журналы веб-логики /внешнего доступа

Включили ли вы протоколы HTTP-доступа на сервере? Эти неудавшиеся запросы отображаются с каким-либо размером байта ответа или они показывают 0 размеров ответа? Какой код ошибки или код статуса HTTP возвращается?

Или, возможно, эти тайм-ауты вообще не записываются в журналы доступа?

Здесь я предполагаю, что внешний сервер, на котором происходят тайм-ауты, также является Weblogic, если нет — этот вопрос направляется команде внешних серверов для их эквивалентной платформы.

** Другие **

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

Еще один аспект, который не был рассмотрен здесь, — это брандмауэр.

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

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

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

Надеюсь, это поможет.

Вы должны расследовать

(a) тайм-аут чтения по умолчанию или явный , в зависимости от того, что используется;

(b) почему сервер не отвечает в течение этого периода, если он должен (просмотреть журналы сервера),

(c) в противном случае, почему время ожидания установлено слишком коротким. Многие тайм-ауты установлены слишком короткими, например, несколько секунд. Они должны составлять приличную долю минуты, а если ожидаемое время отклика больше, удвоить или утроить ожидаемое время отклика.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

curl -I https://losst.ru

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

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

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

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

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

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

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

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

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

Тайм-аут операции — что это такое?

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

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

Причины возникновения ошибки

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

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

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

Весенний запрос MVC-тайм-аут

Spring предоставляет нам свойство с именем spring.mvc.async.request-timeout . Это свойство позволяет нам определить тайм-аут запроса с точностью до миллисекунды.

Давайте определим свойство с таймаутом в 750 миллисекунд:

spring.mvc.async.request-timeout=750

Это свойство является глобальным и настраиваемым извне, но, как и решение Time Limited , оно применяется только к конечным точкам, которые возвращают Вызываемый . Давайте определим конечную точку, аналогичную примеру Time Limited , но без необходимости заключать логику в Futures или предоставлять TimeLimiter :

@GetMapping("/author/mvc-request-timeout")
public Callable getWithMvcRequestTimeout(@RequestParam String title) {
    return () -> {
        bookRepository.wasteTime();
        return bookRepository.findById(title)
          .map(Book::getAuthor)
          .orElse("No book found for this title.");
    };
}

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

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

Что делать посетителю сайта при возникновении ошибки 504

Итак, вы столкнулись с появлением на экране сообщения «error 504». Не спешите уходить с сайта, ведь возникновение сбоя может говорить о неправильной работе вашего браузера или даже наличии более серьезных проблем на уровне пользовательского софта. Попробуйте произвести довольно простые действия, чтобы убедиться, что с вашим программным обеспечением и настройками все в порядке. 

  1. Перезагрузите проблемную страницу или текущий браузер. Если проблема устранилась и не повторяется вновь, особенно при посещении других сайтов, о ней можно просто забыть. При регулярном возникновении однотипных ошибок во время посещения разных ресурсов стоит покопаться в настройках собственного ПО поглубже.
  2. Зайдите на тот же самый сайт, где возникла ошибка сервера 504, используя альтернативный браузер. В случае, когда страница во время тестирования открылась корректно, обновите браузер, в котором случился сбой, до последней версии.
  3. Проверьте, как открываются страницы этого же сайта с другого компьютера или смартфона. Это позволит вам понять, не связано ли появление ошибки 504 с ПО конкретного устройства.
  4. При регулярном появлении HTTP ошибок, в т.ч. с кодом 504, очистите кэш браузера, удалите файлы cookies. Со временем в любом браузере накапливается много «мусора». Произведя очистку, вы поможете программе работать более корректно и даже быстрее.
  5. Произведите сброс настроек роутера или модема, отключив оборудование на некоторое время от сети. Данная операция вряд ли приведет к устранению ошибки 504, но может улучшить качество интернет-соединения. Провайдеры регулярно вносят изменения в настройки собственного софта, обновляют его. Иногда это приводит к конфликту в корректном взаимодействии пользовательского оборудования и серверов оператора. Перезагрузка устройства по питанию в большинстве случаев решает такие проблемы.
  6. Очистите кэш DNS. Данная операция кажется сложной для обычного пользователя, но на деле выполнить ее достаточно легко. Способ очистки зависит от вашей операционной системы, найдите соответствующий мануал в интернете.
  7. Для опытных пользователей подойдет рекомендация временно переключить DNS-сервер на Google Public DNS, что как минимум поможет определить, возник ли ошибочный код состояния HTTP по причине DNS проблемы. 

Если после проведения всех вышеозначенных рекомендаций любая ошибка, в т.ч. 504 Gateway Time Out, продолжает возникать регулярно, обратитесь в техподдержку проблемного интернет-ресурса. 

Решение

Да, это исключает время запроса.

Используете ли вы пулы подключения php? Если так, то 5 секунд — это очень короткий , Сделай это дольше. 60 секунд может быть хорошо. Зачем? весь смысл пулов соединений заключается в том, чтобы некоторые открытые соединения оставались открытыми от php до MySQL, чтобы php мог обрабатывать запросы пользователей без необходимости открывать соединения.

Вот как это работает.

  1. php сидит там и слушает входящие запросы.
  2. Запрос приходит, и скрипт php запускается.
  3. Скрипт php запрашивает соединение с базой данных.
  4. php (модуль mysqli или PDO) проверяет наличие ожидающего соединения в пуле соединений. Если это так, он передает соединение на использование php-скрипта.
  5. Если нет свободного соединения, php создает его и передает его в скрипт php для использования. Это создание соединения запускает обратный отсчет времени.
  6. Скрипт php использует соединение для запроса. Это останавливает обратный отсчет и запускает обратный отсчет времени.
  7. Запрос завершен. Это останавливает обратный отсчет и перезапускает обратный отсчет времени. Повторите 6 и 7 столько раз, сколько необходимо.
  8. Скрипт php освобождает соединение, а php вставляет его в пул соединений. Вернитесь к шагу 1. теперь ведет обратный отсчет для этого соединения, пока оно находится в пуле.
  9. Если соединение истекает, php удаляет его из пула соединений.

Если шаг 9 происходит часто, то шаг 5 также должен происходить часто, и php будет медленнее отвечать на запросы. Вы можете сделать шаг 9 менее частым, увеличив ,

(Примечание: это упрощено: также предусмотрено максимальное количество соединений в пуле соединений.)

MySQL также имеет . Это как но используется для интерактивных сессий через программа командной строки.

Что происходит, когда веб-пользователь делает запрос, а затем отказывается от него до завершения? Например, пользователь может перестать ждать отчета и перейти на другую страницу. В некоторых случаях процессор основного языка обнаруживает закрытие пользовательского соединения, завершает запрос MySQL и возвращает соединение в пул. В других случаях запрос либо завершается, либо попадает в барьер. Затем соединение возвращается в пул. Во всех случаях Обратный отсчет активен только тогда, когда соединение открыто, но для него нет активных запросов.

1

Команда 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, но здесь перечислено все основное, что вам придется использовать.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

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