Http code 0 php curl: PHP cURL HTTP CODE return 0

5. Подробное описание Действия > 5.1. Общие параметры, используемые во многих действиях > 5.1.9. Доступ в Интернет > 5.1.9.1. Список кодов ошибок cURL и их объяснение

 
В качестве вывода каждого интернет-соединения через cURL вы получаете «Код ошибки», который дает некоторое объяснение об успешном/неудачном соединении. Код ошибки «ноль» означает: Нет ошибки. Другие коды ошибок (это выдержка из https://curl.haxx.se/libcurl/c/libcurl-errors.html):

КОД ОШИБКИ

КРАТКОЕ ОПИСАНИЕ

ПОЛНОЕ ОПИСАНИЕ

0

ОК

Все в порядке. Действуйте как обычно.

1

НЕПОДДЕРЖИВАЕМЫЙ_ПРОТОКОЛ

URL-адрес, который вы передали libcurl, использовал протокол, который этот «curl.exe» не поддерживает. это может быть строка протокола с ошибкой или просто протокол, для которого curl не имеет кода.

2

FAILED_INIT

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

3

URL_MALFORMAT

URL-адрес имеет неправильный формат.

4

НЕ ВСТРОЕН

Запрашиваемая функция, протокол или параметр не были встроены в этот curl.exe. Это означает, что функция или параметр не были включены или явно отключены при сборке curl.exe, и чтобы заставить его работать, вам необходимо загрузить другой исполняемый файл «curl.exe».

5

МОЖЕТ_РАЗРЕШИТЬ_ПРОКСИ

Не удалось разрешить прокси. Данный прокси-хост не может быть разрешен.

6

МОЖЕТ_РАЗРЕШИТЬ_ХОСТ

Не удалось разрешить хост. Данный удаленный хост не был разрешен.

7

НЕВОЗМОЖНО_СОЕДИНИТЬ

Не удалось подключиться() к хосту или прокси.

8

FTP_WEIRD_SERVER_REPLY

Сервер отправил данные, которые libcurl не удалось проанализировать. Этот код ошибки используется не только для FTP и имеет псевдоним CURLE_WEIRD_SERVER_REPLY, начиная с версии 7.51.0.

9

REMOTE_ACCESS_DENIED

Нам было отказано в доступе к ресурсу, указанному в URL. Для FTP это происходит при попытке перейти в удаленный каталог.

10

FTP_ACCEPT_FAILED

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

11

FTP_WEIRD_PASS_REPLY

После отправки пароля FTP на сервер libcurl ожидает надлежащего ответа. Этот код ошибки указывает на то, что был возвращен неожиданный код.

12

FTP_ACCEPT_TIMEOUT

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

13

FTP_WEIRD_PASV_REPLY

libcurl не удалось получить разумный результат от сервера в ответ на команду PASV или EPSV. Сервер глючит.

14

FTP_WEIRD_227_FORMAT

FTP-серверы возвращают 227-строчный ответ на команду PASV. Если libcurl не удается разобрать эту строку, этот код возврата передается обратно.

15

FTP_CANT_GET_HOST

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

16

HTTP2

Обнаружена проблема на уровне кадрирования HTTP2. Это несколько общее и может быть одной из нескольких проблем, подробности см. в буфере ошибок.

17

FTP_COULDNT_SET_TYPE

Получена ошибка при попытке установить двоичный режим передачи или ASCII.

18

ЧАСТИЧНЫЙ_ФАЙЛ

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

19

FTP_COULDNT_RETR_FILE

Это был либо странный ответ на команду ‘RETR’, либо завершена передача нулевого байта.

21

QUOTE_ERROR

При отправке пользовательских команд «QUOTE» на удаленный сервер одна из команд возвращала код ошибки 400 или выше (для FTP) или иным образом указывала на неудачное выполнение команды.

22

HTTP_RETURNED_ERROR

Возвращается, если CURLOPT_FAILONERROR имеет значение TRUE, а HTTP-сервер возвращает код ошибки >= 400.

23

ЗАПИСЬ_ОШИБКА

Произошла ошибка при записи полученных данных в локальный файл, или ошибка была возвращена в libcurl из обратного вызова записи.

25

UPLOAD_FAILED

Не удалось начать загрузку. Для FTP сервер обычно отклонял команду STOR. Буфер ошибок обычно содержит объяснение сервера по этому поводу.

26

ЧТЕНИЕ_ОШИБКА

Возникла проблема чтения локального файла или ошибка, возвращенная обратным вызовом чтения.

27

OUT_OF_MEMORY

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

28

ОПЕРАЦИЯ_TIMEDOUT

Тайм-аут операции. Указанный период тайм-аута был достигнут в соответствии с условиями.

30

FTP_PORT_FAILED

Команда FTP PORT вернула ошибку. В основном это происходит, когда вы не указали достаточно хороший адрес для использования libcurl. См. CURLOPT_FTPPORT.

31

FTP_COULDNT_USE_REST

Команда FTP REST вернула ошибку. Этого никогда не должно происходить, если сервер в здравом уме.

33

ДИАПАЗОН_ОШИБКА

Сервер не поддерживает и не принимает запросы диапазона.

34

HTTP_POST_ERROR

Это странная ошибка, которая в основном возникает из-за внутренней путаницы.

35

SSL_CONNECT_ERROR

Произошла ошибка где-то в рукопожатии SSL/TLS. Вам действительно нужен буфер ошибок и прочтите там сообщение, так как оно немного больше указывает на проблему. Это могут быть сертификаты (форматы файлов, пути, разрешения), пароли и другие.

36

BAD_DOWNLOAD_RESUME

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

37

ФАЙЛ_КОУЛДНТ_ЧИТАТЬ_ФАЙЛ

Не удалось открыть файл, заданный с помощью FILE://. Скорее всего, потому что путь к файлу не идентифицирует существующий файл. Вы проверяли права доступа к файлам?

38

LDAP_CANNOT_BIND

LDAP не может выполнить привязку. Сбой операции привязки LDAP.

39

LDAP_SEARCH_FAILED

Ошибка поиска LDAP.

41

ФУНКЦИЯ_НЕ НАЙДЕНА

Функция не найдена. Требуемая функция zlib не найдена.

42

ABORTED_BY_CALLBACK

Прервано обратным вызовом. Обратный вызов вернул libcurl «отмена».

43

ПЛОХОЙ_ФУНКЦИОНАЛЬНЫЙ_АРГУМЕНТ

Внутренняя ошибка. Функция была вызвана с неверным параметром.

45

ИНТЕРФЕЙС_ОШИБКА

Ошибка интерфейса. Не удалось использовать указанный исходящий интерфейс. Укажите, какой интерфейс использовать для IP-адреса источника исходящих подключений, с помощью CURLOPT_INTERFACE.

47

TOO_MANY_REDIRECTS

Слишком много перенаправлений. При следовании перенаправлениям libcurl достигает максимальной суммы. Установите лимит с помощью CURLOPT_MAXREDIRS.

48

НЕИЗВЕСТНАЯ_ОПЦИЯ

Параметр, переданный libcurl, не распознан/неизвестен. См. соответствующую документацию. Скорее всего проблема в программе, которая использует libcurl. Буфер ошибок может содержать более конкретную информацию о том, к какому именно параметру он относится.

49

TELNET_OPTION_SYNTAX

Строка параметров telnet имеет недопустимый формат.

51

PEER_FAILED_VERIFICATION

SSL-сертификат удаленного сервера или отпечаток пальца SSH md5 признаны несоответствующими.

52

GOT_NOTHING

С сервера ничего не было возвращено, и в данных обстоятельствах получение ничего не считается ошибкой.

53

SSL_ENGINE_NOTFOUND

Указанный механизм шифрования не найден.

54

SSL_ENGINE_SETFAILED

Не удалось установить выбранный механизм шифрования SSL по умолчанию!

55

ОТПРАВИТЬ_ОШИБКА

Ошибка отправки сетевых данных.

56

RECV_ERROR

Сбой при получении сетевых данных.

58

ПРОБЛЕМА SSL_CERT

проблема с сертификатом локального клиента.

59

SSL_CIPHER

Не удалось использовать указанный шифр.

60

SSL_CACERT

Сертификат узла не может быть аутентифицирован известными сертификатами ЦС.

61

BAD_CONTENT_ENCODING

Нераспознанное кодирование передачи.

62

LDAP_INVALID_URL

Недопустимый URL-адрес LDAP.

63

FILESIZE_EXCEEDED

Превышен максимальный размер файла.

64

USE_SSL_FAILED

Запрошенный уровень FTP SSL не выполнен.

65

ОТПРАВИТЬ_FAIL_REWIND

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

66

SSL_ENGINE_INITFAILED

Не удалось запустить механизм SSL.

67

LOGIN_DENIED

Удаленный сервер отказал curl в входе в систему (добавлено в 7.13.1)

68

TFTP_NOTFOUND

Файл не найден на сервере TFTP.

69

TFTP_PERM

Проблема с правами доступа на TFTP-сервере.

70

REMOTE_DISK_FULL

Недостаточно места на сервере.

71

TFTP_ILLEGAL

Недопустимая операция TFTP.

72

TFTP_UNKNOWNID

Неизвестный идентификатор передачи TFTP.

73

REMOTE_FILE_EXISTS

Файл уже существует и не будет перезаписан.

74

TFTP_NOSUCHUSER

Эта ошибка никогда не должна возвращаться правильно работающим сервером TFTP.

75

CONV_FAILED

Ошибка преобразования символов.

76

CONV_REQD

Вызывающий абонент должен зарегистрировать обратные вызовы преобразования.

77

SSL_CACERT_BADFILE

Проблема с чтением сертификата SSL CA (путь? права доступа?)

78

REMOTE_FILE_NOT_FOUND

Ресурс, указанный в URL-адресе, не существует.

79

СШ

Неизвестная ошибка во время сеанса SSH.

80

SSL_SHUTDOWN_FAILED

Не удалось закрыть соединение SSL.

81

СНОВА

Сокет не готов к отправке/получению Подождите, пока он будет готов, и повторите попытку. Этот код возврата возвращается только из curl_easy_recv и curl_easy_send (добавлено в 7. 18.2)

82

SSL_CRL_BADFILE

Не удалось загрузить файл CRL (добавлено в версии 7.19.0)

83

SSL_ISSUER_ERROR

Ошибка проверки эмитента (добавлено в 7.19.0)

84

FTP_PRET_FAILED

FTP-сервер вообще не понимает команду PRET или не поддерживает данный аргумент. Будьте осторожны при использовании CURLOPT_CUSTOMREQUEST, пользовательская команда LIST также будет отправлена ​​с PRET CMD перед PASV. (Добавлено в 7.20.0)

85

RTSP_CSEQ_ERROR

Несоответствие номеров RTSP CSeq.

86

RTSP_SESSION_ERROR

Несоответствие идентификаторов сеанса RTSP.

87

FTP_BAD_FILE_LIST

Невозможно проанализировать список файлов FTP (во время загрузки подстановочных знаков FTP).

88

CHUNK_FAILED

Обратный вызов фрагмента сообщил об ошибке.

89

НЕТ_СОЕДИНЕНИЯ_ДОСТУПНО

(только для внутреннего использования, никогда не будет возвращено libcurl) Соединение недоступно, сеанс будет поставлен в очередь. (добавлено в 7.30.0)

90

SSL_PINNEDPUBKEYNOTMATCH

Не удалось сопоставить закрепленный ключ, указанный с помощью CURLOPT_PINNEDPUBLICKEY.

91

SSL_INVALIDCERTSTATUS

Состояние вернуло ошибку при запросе с помощью CURLOPT_SSL_VERIFYSTATUS.

92

HTTP2_STREAM

Ошибка потока на уровне кадрирования HTTP/2.

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

спросил

Изменено
4 месяца назад

Просмотрено
2,1 млн раз

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

  • http
  • curl
  • статус

4

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

 curl -I http://www.example.org
 

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

12

Более конкретный способ распечатать просто код состояния HTTP выглядит примерно так:

 curl -s -o /dev/null -w "%{http_code}" http://www.example. орг/
 

Намного проще работать в скриптах, так как не требует синтаксического анализа 🙂

Параметр -I может быть добавлен для улучшения производительности загрузки ответов. Это изменит вызов на вызов HEAD , который будет извлекать только служебные данные ответа, без тела.

Примечание: %{http_code} возвращает первую строку полезных данных HTTP (доступные переменные для параметра -w на странице документации curl )

т.е.:

 curl - с-о / dev /null -I -w "%{http_code}" http://www.example.org/
 

21

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

 curl -i http://example.org
 

Преимущество -i в том, что он работает и с -X POST .

7

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

 curl -v http://www.example.org
curl --verbose http://www.example.org
 

Статус появится в шапке. Например.

 < Дата: вторник, 04 ноября 2014 г. , 19:12:59 по Гринвичу
< Тип содержимого: приложение/json; кодировка = utf-8
< Статус: 422 Необрабатываемый объект
 

4

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

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

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

Собираем все вместе в bash 3.2.57(1) — выпуск (стандарт для macOS ):

 # создает новый файловый дескриптор 3, который перенаправляет на 1 (STDOUT)
выполнить 3>&1
# Запускаем curl в отдельной команде, записывая вывод -w "%{http_code}" в HTTP_STATUS
# и отправить содержимое в STDOUT этой команды с помощью -o >(cat >&3)
HTTP_STATUS=$(curl -w "%{http_code}" -o >(cat >&3) 'http://example. com')
 

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

8

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

 curl -sw '%{http_code}' http://example.org
 

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

2

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

 [0]$ curl -LI http://www.example.org -o /dev/null -w '%{http_code}\n' -s
[0]$ 200
 

Все кредиты этого GIST

2

Это болезненный завиток --fail ограничение. Из мужской завиток :

-f, --сбой
(HTTP) Автоматический сбой (вообще нет вывода) при ошибках сервера

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

Основываясь на ответе pvandenberk и этом другом очень полезном трюке, изученном на SO, вот обходной путь:

 curl_with_error_code () {
    _curl_with_error_code "$@" | sed '$d'
}
_curl_with_error_code () {
    локальный curl_error_code http_code
    выполнение 17>&1
    http_code=$(curl --write-out '\n%{http_code}\n' "$@" | tee /dev/fd/17 | tail -n 1)
    curl_error_code=$?
    выполнение 17>&-
    если [ $curl_error_code -ne 0 ]; затем
        вернуть $curl_error_code
    фи
    если [$http_code -ge 400] && [$http_code -lt 600]; затем
        echo "HTTP $http_code" >&2
        вернуться 127
    фи
}
 

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

3

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

Содержит код ответа

 curl -I http://example.org 2>/dev/null | голова -n 1 | вырезать -d$'' -f2
 

2

Для запроса POST сработало следующее:

 curl -w 'RESP_CODE:%{код_ответа}' -s -X POST --data '{"asda":"asd"}' http://example.com --header "Content-Type:application/json"|grep -o 'RESP_CODE:[1-4][0-9][0-9]'
 

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

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

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

  • -I : Показать только заголовки ответа
  • -s : Без звука - Не показывать индикатор выполнения
  • -L : Следуйте Местоположение: заголовки

Вот ссылка на коды состояния HTTP.

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

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

 curl -so /dev/null -w '%{код_ответа}' http://www.example.org
 

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

 curl-I http://www.example.org
 

2

 curl -so -i /dev/null -w "%{http_code}" http://www.any_example.com
 

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

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

2

Пример использования кодов ответов. Я использую это для повторной загрузки баз данных Geolite, только если они изменились ( -z ), а также следующие перенаправления ( -L ):

 url=http://example. com/file.gz
файл=$(базовое имя $url)
ответ=$(curl -L -s -o $file -z $file $url -w "%{http_code}")
case "$response" в
        200) сделать что-то ;;
        301) сделать что-то ;;
        304) printf "Получено: ответ HTTP $ (файл без изменений) ==> $url\n" ;;
        404) printf "Получено: ответ HTTP $ (файл не найден) ==> $url\n" ;;
          *) printf "Получено: HTTP $response ==> $url\n" ;;
эсак
 

Разделить вывод содержимого на stdout и код состояния HTTP на stderr :

 curl http://www.example.org -o >(cat >&1) -w "%{http_code}\n" 1> &2
 

Если для stderr требуется только код состояния HTTP, можно использовать --silent :

 curl --silent http://www.example.org -o >(cat >&1) -w "%{http_code }\n" 1>&2
 

Затем нужный поток можно выбрать, перенаправив нежелательный на /dev/null :

 $ (curl --silent http://www.example.org -o >(cat >&1) -w "%{http_code}" 1>&2) 1>/dev/null
200
$ (curl --silent http://www. example.org -o >(cat >&1) -w "%{http_code}" 1>&2) 2>/dev/null

...
 

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

2

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

 curl -R -s -S -w "\nhttp: %{http_code} %{size_download}\n" -o /Users/myfiles/the_local_name.html http://archive.onweb.com/the_online_name.html
 

Затем я жду завершения завитка

 ждать ${!}
 

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

.

http: 200 42824

http: 200 34728

http: 200 35452

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

  • 2>&1: ошибка сохраняется в выходных данных для синтаксического анализа
  • grep: отфильтровать строку кода ответа из вывода
  • awk: отфильтровывает код ответа из строки кода ответа
  • .

  • sed: удаляет все начальные пробелы

Существует еще один способ использования команды Powershell, которая является псевдонимом curl.exe.
Просто введите следующее:

(Invoke-WebRequest -Uri https://your.website).StatusCode

В Windows PowerShell:

curl https:\\www.example.org -Method HEAD

На самом деле это просто псевдоним для Invoke-WebRequest .

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.