Что такое код curl_error


Содержание

Почему я получаю HTTP_CODE 0 от curl?

Я использовал curl с PHP некоторое время. Сегодня я пытался получить http://www.webhostingstuff.com/category/Best-Hosting.html, и я продолжаю получать http-код 0, который для меня новичок.

Я устанавливаю заголовки

и у меня есть файл cookie (который не имеет ничего, когда script заканчивает загрузку)

Здесь функция завитка

Я также пытался выполнить через SSH с другого сервера (в случае его блокировки IP)

Как я могу это решить?

Код состояния 0 означает, что соединение было закрыто (изящно) до того, как был возвращен любой результат.

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

должен был быть:

cURL считает, что вы указываете опцию -u, которая используется для указания имени пользователя, и, следовательно, сообщение об ошибке, которое вы получили. Вам нужно указать -url (две тире).

Надеюсь, что это по крайней мере помогает при отладке.

В моем случае код http 0 возвращался из-за таймаута соединения. Добавив

Мне удалось избавиться от ошибки

Возможно, это была некоторая внутренняя ошибка сервера? Сейчас он работает:

Я использую HTTP_Request2 пакет pear как обертка для завитушек, код:

0 код означает, что curl не может найти сервер, который вы искали. «yahoo.com/whatever» вернет 404, а «yahoo.comwhatever» вернется 0.

Вчера я столкнулся с подобной проблемой. Я потратил 2 часа на эту проблему. Я был в системе RHEL. Код проверки зависания был ниже блока для проверки подлинности:

Этот код использовался для аутентификации. В лабораторной среде он возвратил 200, но на производстве он вернул 0.

Затем я сделал аналогичный script (который использовал curl) и запускался, если из командной строки, как php test3.php . Результатом этого прогона стал 200 код состояния.

Тогда из любопытства я решил временно отключить SELinux , выполнив эту команду:

И угадайте, что это сработало. Затем вы можете правильно настроить контекст, запустив setsebool httpd_can_network_connect on

PHP curl всегда возвращает http_code 0

Здравствуйте, сообщество StackOverflow, я столкнулся с проблемой при попытке использовать методы cURL в PHP. Я пытался с этим примером кода:

И это всегда заканчивается ошибкой, отображаемой на экране:

Код возврата 0 Ошибка записи: соединение было сброшено

Или эта ошибка при попытке доступа к любому сайту с помощью https:

Код возврата 0 Не удалось подключиться к порту www.google.com 443: по времени
из

Это мои настройки:

  • Windows 7 Профессиональная 32 бит
  • Apache 2.4.12
  • PHP 5.6.11

Это ошибка кода или какие-либо конфигурации серверов, которые я не рассматривал?

HTTP_HOST значение в Apache равно localhost:8080 Я не совсем уверен, имеет ли это какое-то отношение к моей проблеме, но, возможно, это стоит отметить.

Спасибо всем заранее.

Решение

Я разработал пользовательскую функцию, которая отлично работает для GET, POST and ajax Запросы.

Итак, параметры есть,

$header => Заголовки для отправки на сервер, это должно быть associative array ,

$referer => Ссылка на текущую страницу (если есть).

$url => URL, который вы хотите получить.

$cookie => cookie-файл, должен находиться на том же уровне, что и вызывающий скрипт.

Получение curl для вывода кода состояния HTTP?

Я использую curl в командной строке Linux для отправки HTTP-запросов. Органы реагирования печатаются по стандарту, что хорошо, но на странице руководства я не вижу, как получить завиток, чтобы напечатать код состояния HTTP из ответа (404, 403 и т. Д.). Возможно ли это?

15 ответов

Это должно работать для вас , если веб-сервер может отвечать на запросы HEAD (это не будет выполнять GET ):

В качестве дополнения, чтобы cURL выполнял переадресацию (статусы 3xx) add -L.

Более конкретный способ распечатать только код состояния HTTP — это что-то вроде следующих строк:

Намного проще работать с скриптами, так как он не требует разбора: -)

Параметр -I может быть добавлен для повышения производительности отклика. Этот параметр просто запрашивает статус / заголовки ответа, без тела ответа загрузки. (% возвращает первую строку полезной нагрузки HTTP)

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

Состояние появится в заголовке. Например.

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

Хорошая вещь о -i заключается в том, что она работает и с -X POST .

Если вы хотите захватить код состояния HTTP в переменной, но перенаправляете контент на STDOUT, вы должны создать два STDOUT. Вы можете сделать это с помощью замены процесса > () и подстановка $ () .

Сначала создайте дескриптор файла 3 для вашего текущего процесса ‘STDOUT с exec 3>&1 .

Затем используйте параметр -o curl для перенаправления содержимого ответа на временный fifo с помощью подстановки команд, а затем в рамках этой подстановки команды перенаправляет вывод обратно в ваш текущий дескриптор файла STDOUT процесса 3 с -o >(cat >&3) .

Объединяя все вместе в bash 3.2.57(1)-release (стандарт для macOS ):

Обратите внимание, что это не работает в /bin/sh как СамК отметил в комментариях ниже .

Переопределить вывод кривого:

Может использоваться с любым типом запроса.

Это отправит запрос на URL-адрес, получит только первую строку ответа, разделит его на блоки и выберите второй.

Он содержит код ответа

Код состояния ТОЛЬКО

Все это относится к GIST

Для запроса POST работало:

Это болезненное ограничение curl —fail . От man curl :

-f, —fail (HTTP) Fail silently (no output at all) on server errors

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

Эта функция ведет себя точно как curl , но вернет 127 (код возврата, не использованный curl ) в случае HTTP-кода в диапазоне [400, 600 [.

Это вернет следующую информацию:

  1. данные ответа, если какие-либо данные возвращаются API, например error
  2. код состояния

Вот некоторая команда curl, которая использует GET и возвращает код HTTP.

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

Используйте следующую команду cURL и подключите ее к grep следующим образом:

$ curl -I -s -L http://example.com/v3/get_list | grep «HTTP/1.1»

Вот что делает каждый флаг:

  • -I : Показать только заголовки ответов
  • -s : Silent — не показывать индикатор выполнения
  • -L : следить за заголовками Location:

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

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

Затем я жду окончания финиша

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

Обратите внимание, что в-cur в curl должен следовать полный путь к файлу + имя файла. Это позволяет вам, таким образом, сохранять файлы в разумной структуре имен, когда вы d / l их с curl. Также обратите внимание, что -s и -S, используемые вместе, отключают вывод, но показывают ошибки. Также обратите внимание, что -R пытается установить временную метку файла в файл веб-файла.

Мой ответ основан на том, что первоначально предлагал @pvandenberk, но, кроме того, он фактически сохраняет файл где-то, а не просто направляет / dev / null.

Получаем HTTP статус-коды сайта с помощью PHP и CURL

Используя нижеприведенный код вы сможете проверить, существует сайт или нет. Также можно проверить, есть ли на сайте редирект.

Используя нижеприведенный код вы сможете проверить, существует сайт или нет. Также можно проверить, есть ли на сайте редирект. Это может быть полезно для сайтов-каталогов, которые хотите проверить урлы, которые больше не являются активными или обновить свои ссылки. С помощью CURL мы получаем все статус коды для какого либо сайта, а затем ищем совпадения со списком HTTP статус-кодов.

$toCheckURL = «http://google.com» ; // Домен для проверки

// поработаем с CURL

curl_setopt( $ch , CURLOPT_URL, $toCheckURL );

curl_setopt( $ch , CURLOPT_HEADER, true);

curl_setopt( $ch , CURLOPT_NOBODY, true);

curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true);

curl_setopt( $ch , CURLOPT_FOLLOWLOCATION, true);

curl_setopt( $ch , CURLOPT_MAXREDIRS, 10); // разрешаем только 10 редиректов за раз во избежание бесконечного цикла

$data = curl_exec( $ch );

$http_code = curl_getinfo( $ch , CURLINFO_HTTP_CODE); // Получаем HTTP-код

$new_url = curl_getinfo( $ch , CURLINFO_EFFECTIVE_URL);

// Массив возможных HTTP статус кодовв

$codes = array (0=> ‘Domain Not Found’ ,

101=> ‘Switching Protocols’ ,

203=> ‘Non-Authoritative Information’ ,

205=> ‘Reset Content’ ,

206=> ‘Partial Content’ ,

300=> ‘Multiple Choices’ ,

301=> ‘Moved Permanently’ ,

304=> ‘Not Modified’ ,

307=> ‘Temporary Redirect’ ,

400=> ‘Bad Request’ ,

402=> ‘Payment Required’ ,

405=> ‘Method Not Allowed’ ,

406=> ‘Not Acceptable’ ,

407=> ‘Proxy Authentication Required’ ,

408=> ‘Request Timeout’ ,

411=> ‘Length Required’ ,

412=> ‘Precondition Failed’ ,

413=> ‘Request Entity Too Large’ ,

414=> ‘Request-URI Too Long’ ,

415=> ‘Unsupported Media Type’ ,

416=> ‘Requested Range Not Satisfiable’ ,

417=> ‘Expectation Failed’ ,

500=> ‘Internal Server Error’ ,

501=> ‘Not Implemented’ ,

502=> ‘Bad Gateway’ ,

503=> ‘Service Unavailable’ ,

504=> ‘Gateway Timeout’ ,

505=> ‘HTTP Version Not Supported’ );

// Ищем совпадения с нашим списком

if (isset( $codes [ $http_code ])) <

echo ‘Сайт вернул ответ: ‘ . $http_code . ‘ — ‘ . $codes [ $http_code ]. ‘
‘ ;

preg_match_all( «/HTTP/1.[1|0]s(d<3>)/» , $data , $matches );

array_pop ( $matches [1]);

if ( count ( $matches [1]) > 0) <

// Идем дальше по списку, чтобы посмотреть, какие мы еще статус коды получили

foreach ( $matches [1] as $c ) <

echo $c . ‘ — ‘ . $codes [ $c ]. ‘
‘ ;

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

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

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

Что такое curl?

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

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

Команда curl

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

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

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

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

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

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

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

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

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

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

curl -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 декабря 2020.

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

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

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

Отправка данных 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 —header ‘If-Modified-Since: Mon, 26 Dec 2020 18:13:12 GMT’ https://losst.ru

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

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

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

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

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

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

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

Выводы

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

WordPress на русском

Канал на YouTube

Реклама

Популярные записи

Свежие записи

Свежие комментарии

  • ildar r. khasanshin к записи Как очистить сайт на WordPress, если его взломали
  • Как очистить сайт на WordPress, если его взломали — WordPress на русском к записи Как создать дочернюю тему WordPress
  • Александр к записи Как добавить reCAPTCHA в DW Questions & answers
  • wordpress к записи Как убрать ошибку «В настоящий момент выполняется другое обновление»
  • wordpress к записи Как добавить reCAPTCHA в DW Questions & answers

Как исправить ошибку «cURL error 28: Connection timed out» при обновлении WordPress

В этой короткой статье мы расскажем, как устранить ошибку «cURL error 28: Connection timed out in XXXX milliseconds» при обновлении плагинов или тем WordPress. Это довольно распространённая ошибка, и связана она с сервером. В большинстве случаев она не вызывается ни какой-либо темой, ни плагином, и не самим WordPress.

Как исправить ошибку?

Первое, что нужно сделать, это обновить WordPress до актуальной версии.

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

  • Убедитесь, что на сервере работает последняя версия PHP и библиотеки cURL.
  • Попробуйте увеличить параметр лимита памяти сервера (memory_limit).
  • Эта ошибка cURL может быть связана с проблемами, связанными с DNS. Если вы используете собственный сервер, попробуйте переключить конфигурацию на OpenDNS.
  • Уточните у провайдера, нет ли ограничений на выполнение wp-cron и не отключен ли loopback.
  • Уточните у провайдера, возможно, брэндмауэр или модули защиты (например, mod_security ) блокируют исходящие запросы cURL.

Урок по cURL: основы использования и пара полезных трюков (часть первая)

Pirnazar

Well-known member

Для чего нужна cURL

  • cURL отлично подходит для имитации действий пользователя в браузере.

Реальный практический пример: вам нужно перезагрузить роутер (модем) для смены IP адреса. Для этого нужно: авторизоваться в роутере, перейти к странице обслуживания и нажать кнопку «Перезагрузка». Если это действие нужно выполнить несколько раз, то процедуру нужно повторить. Согласитесь, делать каждый раз в ручную эту рутину не хочется. cURL позволяет автоматизировать всё это. Буквально несколькими командами cURL можно добиться авторизации и выполнения задания на роутере.

  • cURL удобен для получения данных с веб-сайтов в командной строке.

Ещё один практический пример: мы хотим реализовать показ общей статистики для нескольких сайтов. Если использовать cURL, то это становится вполне тривиальной задачей: с помощью cURL мы проходим аутентификацию на сервисе сбора статистики (если это требуется), затем (опять же командами cURL) получаем необходимые страницы, парсим нужные нам данные; процедура повторяется для всех наших сайтов, затем мы складываем и выводим конечный результат.

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

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

cURL в PHP и командной строке

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

Чтобы включить cURL в PHP на сервере, необходимо в файле php.ini раскомментировать строку

А затем перезагрузить сервер.

На Linux необходимо установить пакет curl.

На Debian, Ubuntu или Linux Mint:

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

Получение данных при помощи cURL

Получение данных при помощи cURL в PHP

Всё очень просто:
$target_url — адрес сайта, который нас интересует. После адреса сайта можно поставить двоеточие и добавить адрес порта (если порт отличается от стандартного).

curl_init — инициализирует новый сеанс и возвращает дискриптор, который в нашем примере присваивается переменной $ch.

Затем мы выполняем запрос cURL функцией curl_exec, которой в качестве параметра передаётся дискриптор.

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

Чуть дополним наш скрипт:

У нас появилась строчка curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);.

curl_setopt — задаёт опции. Полный список опций можно найти на этой странице:

Теперь значение скрипта присваивается переменной $response_data, с которой можно проводить дальнейшие операции. Например, можно вывести её содержимое.

служат для отладки, на случай возникновения ошибок.

Получение данных при помощи cURL в командной строке

В командной строке достаточно набрать

где вместо mi-al.ru — адрес вашего сайта.

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

Чтобы они не выводились, добавляем ключ -s:

если curl getinfo для HTTP CODE не возвращает код?

Я делаю обычный вызов curl к webservice, и я получаю код HTTP возврата через

Он возвращает мне $ code как 200 – это хорошо. Но регистрировать звонки завитки сейчас с недели, там, где мало звонков на тот же веб-сервис, который ничего не возвращал! так что в основном я получаю $ code пустым.

Может кто-нибудь сказать мне, что должно быть неправильно в этих сценариях, и если можно отладить его больше !?

Спасибо всем за информацию. Да, я тоже думал о том, что не дошел до сервера. Я обновлю свой код, чтобы получить curl_error && curl_errno и скоро обновит вас.

Еще раз спасибо.

———————- Обновление 2 ————————– ——————————- Я обновил свой код, чтобы вернуть мне ошибку № 7 – не удалось подключиться к хосту , Я зарегистрировал все завитки, так что в основном около 90-98% звонков завитка выполняется хорошо. Но только 1-2% вызовов завитка не могут найти хоста! Может ли кто-нибудь сказать мне, что может быть причиной? и как я могу это предотвратить?

Еще раз спасибо, Tanmay

Если код cURL HTTP ничего не возвращает (aka ‘0’), это означает, что по какой-то причине операция cURL завершилась неудачно. Было бы полезно захватить curl_error в ваших журналах, а также дать вам больше информации о том, что произошло в этих случаях (если они повторяются).

Когда вы регистрируете его, проверьте, если он пуст, если он есть, запишите больше, используя эту функцию

Я предполагаю, что он не сможет добраться до сервера.

Вы не можете получить curl_getinfo из curl_getinfo запроса. Проверьте результат curl_exec чтобы определить, был ли выполнен фактический запрос HTTP.

Тайм-аут соединения или что-то подобное – это «неудачный запрос». В этом случае curl_exec возвращает FALSE (как указано в руководстве curl_exec ).

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

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

curl_error

(PHP 4 >= 4.0.3, PHP 5, PHP 7)

curl_error — Возвращает строку с описанием последней ошибки текущего сеанса

Описание

Возвращает понятное сообщение об ошибке для последней операции cURL.

Список параметров

Дескриптор cURL, полученный из curl_init() .

Возвращаемые значения

Возвращает сообщение об ошибке или » (пустую строку), если ошибки не произошло.

Примеры

Пример #1 Пример использования curl_error()

// Создаем дескриптор curl к несуществующему адресу
$ch = curl_init ( ‘http://404.php.net/’ );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );

if( curl_exec ( $ch ) === false )
<
echo ‘Ошибка curl: ‘ . curl_error ( $ch );
>
else
<
echo ‘Операция завершена без каких-либо ошибок’ ;
>

// Закрываем дескриптор
curl_close ( $ch );
?>

Команда 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.

Илон Маск рекомендует:  Integer - Тип Delphi
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL