Php узнать код ответа сервера: Как получить HTTP код ответа удаленного веб-сервера из PHP?

Коды ответов сервера

Коды ответов, как правило, генерирует веб сервер. В некоторых случаях их подменяет php, отдавая тем самым другой код.Коды можно разделить на 5 групп: информационные (коды 100,101), удачные (коды 200 — 206), переадресация (коды 300 — 305), неполные (коды 400 — 415) и ошибки сервера (коды 500 — 505).

КодРасшифровкаОписание
100ContinueСервер сообщает, что начальные данные получены.
101Switching ProtocolsСервер переключает протоколы в соответствии с поступившем требованием клиента.
200OkЗапрос был успешно обработан.
201CreatedЭтот код передаётся при создании нового url.
202AcceptedЗапрос получен, но ещё не обработан. При этом нельзя сказать наверняка, будет ли запрос в конечном итоге успешно обработан. В дополнение к ответу, сервер может также передать дополнительную информацию о транзакции.
203Non-Authoritative InformationИнформация в заголовке содержимого взята из локальной копии или из другого источника, а не с исходного сервера.
204No ContentКод состояния получен, но тело содержимого отсутствует. При данном ответе браузер не обновляет содержимое страницы.
205Reset ContentТребуется очистить форму, используемую в передаче данных, для дополнительных данных.
206Partial ContentСервер вернул не все данные из требуемых. Данный код может быть получен, если указан заголовок Range
300Multiple ChoicesЗатребованный url обозначает более одного ресурса.
301Moved PermanentlyЗатребованный адрес устарел и более не используется.
302Moved TemporarilyЗатребованные данные временно перемещены.
303See OtherЗатребованные данные нужно искать по другому адресу.
304Not ModifiedДанные с указанной даты не изменялись.
305Use ProxyДоступ к адресу должен осуществляться только через прокси сервер.
400Bad RequestСервер обнаружил синтаксическую ошибку в запросе.
401UnauthorizedПославший запрос пользователь не имеет необходимых полномочий.
402Payment Requiredне реализовано
403ForbiddenЗапрос отклонен сервером.
404Not FoundДокумент по указанному пути не найден.
405Method Not AllowedМетод запроса не поддерживается для данного url.
406Not AcceptableРесурс существует, однако, выбран не тот формат.
407Proxy Authentication RequiredПрокси сервер не санкционировал данный запрос.
408Request Time-outВремя ожидания запроса было превышено.
409ConflictДанный запрос конфликтует с другим.
410GoneЗапрошенный документ был навсегда удалён и более не доступен.
411Length RequiredНеобходимо указать заголовок Content-Length, иначе запрос будет отклонён.
412Precondition FailedУсловие, указанное в запросе, ложно.
413Request Entity Too LargeТело запроса слишком велико.
414Request-URI Too LongСлишком длинный url запроса.
415Unsupported Media TypeНеверный формат тела запроса.
500Internal Server ErrorОтказ скрипта или конфигурации.
501Not ImplementedСервер не может выполнить данное действие.
502Bad GatewayПолучил недопустимый ответ от другого сервера.
503Service UnavailableСлужба временно недоступна.
504Gateway Time-outАналогично 408 для шлюза.
505HTTP Version not supportedСервер не поддерживает версию http протокола, использованную в запросе.

Получение данных PHP cURL (curl_init, curl_setopt)

Примеры использования cURL в PHP

Содержание:

  1. GET запрос с помощью Curl
  2. GET-запрос Curl с параметрами
  3. Curl POST запрос
  4. Отправка CURL JSON через POST-запрос
  5. CURL PUT запрос
  6. CURL DELETE запрос
  7. CURL запрос через proxy
  8. Отправка файлов на другой сервер через CURL
  9. Отправка несколько файлов на другой сервер с помощью библиотеки Curl
  10. CURL отправка файла методом PUT (так загружаются файлы в REST API)
  11. Скачивание файлов CURLOPT_FILE
  12. Отправить и получить cookie через curl
  13. Имитация браузера через CURLOPT_HTTPHEADER
  14. HTTP авторизация через PHP CURL
  15. Получить HTTP код ответа сервера на PHP
  16. Загрузка через FTP с помощью cURL

Примеры использования cURL для реализации программных модулей при создании сайтов.

PHP библиотека cURL – предназначена для получения и передачи данных через протоколы: HTTP, FTP, HTTPS. Библиотека cURL и ее расширение для PHP libcURL — полезный инструмент при решении имитации запросов веб браузеров. В данной статье рассмотрим несколько практических применений PHP cURL.

Параметры Curl — curl_setopt

  • CURLOPT_RETURNTRANSFER — вернуть ответ в виде строки, вместо того, чтобы показывать его сразу
  • CURLOPT_CONNECTTIMEOUT — сколько по времени ждать ответа
  • CURLOPT_TIMEOUT — сколько секунд будет выполняться cURL запрос
  • CURLOPT_USERAGENT — headers (заголовки) для запроса
  • CURLOPT_URL — URL куда будет отправлен запрос
  • CURLOPT_POST — отправить POST запрос
  • CURLOPT_POSTFIELDS — массив POST полей к запросу

GET запрос с помощью Curl

GET-запрос Curl с параметрами

Curl POST запрос

Отправка CURL JSON через POST-запрос

CURL PUT запрос

CURL DELETE запрос

CURL запрос через proxy

Отправка файлов на другой сервер через CURL

Отправка несколько файлов на другой сервер с помощью библиотеки Curl

CURL отправка файла методом PUT (так загружаются файлы в REST API)

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

Пример позволяет сохранить результат в файл, указав указатель на открытый файл в параметре CURLOPT_FILE.

Второй вариант скачивания файла:

Отправить и получить cookie через curl

Чтобы сохранить куки в файле достаточно прописать путь в параметрах CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR.

Передать значение cookie через параметр CURLOPT_COOKIE

Имитация браузера через CURLOPT_HTTPHEADER

На многих сайтах существует защита от получения данных скриптом. Такая защита основана на том что браузер передает серверу заголовки: user agent, referer, cookie. Сервер проверяет эти данные и если он не попадают под фильтр — возвращает страницу сайта. При обычном подключение php curl эти данные не передаются и для этого нужно в параметрах добавить заголовки:

HTTP авторизация через PHP CURL

Basic Authorization

Если на сервере настроена HTTP авторизация, например с помощью .htpasswd, подключится к нему можно с помощью параметра CURLOPT_USERPWD.

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

Получить HTTP код ответа сервера на PHP

Загрузка через FTP с помощью cURL

Помогла ли вам статья?

362
раз уже помогла

Комментарии: (0)

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

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

  • http
  • curl
  • статус

4

Это должно сработать для вас , если веб-сервер может отвечать на запросы HEAD (это не будет выполнять запрос 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 -s -o /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

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

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

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

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

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

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

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

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

.

AWS SDK для PHP | SDK AWS для PHP


ПРИМЕЧАНИЕ. Версию 3 AWS SDK для PHP см.
Руководство пользователя V3
и Справочник по API V3.

AWS SDK для PHP позволяет PHP-разработчикам легко работать с Amazon Web Services и создавать
масштабируемые решения с Amazon S3, Amazon DynamoDB, Amazon Glacier и другими. Вы можете начать работу за считанные минуты,
установка SDK через Composer
или загрузив один zip или
фар файл.

  • Руководство пользователя
  • Домашняя страница SDK
  • Форум
  • Проблемы
  • Упаковщик/Композитор
  • Руководство по вкладу
  • Лицензия
Имя службы Пространство имен Версии
AWS CloudFormation Aws\CloudFormation 15 мая 2010 г. (последняя)
AWS CloudTrail Aws\CloudTrail 01.11.2013 (последняя)
AWS CodeCommit AWS\CodeCommit 13 апреля 2015 г. (последняя)
AWS CodeDeploy Aws\CodeDeploy 06.10.2014 (последняя)
AWS CodePipeline Aws\CodePipeline 09.07.2015 (последняя)
AWS Config Aws\ConfigService 2014-11-12 (последняя)
Конвейер данных AWS Aws\DataPipeline 29 октября 2012 г. (последняя)
Ферма устройств AWS Aws\DeviceFarm 23 июня 2015 г. (последняя)
AWS Direct Connect Aws\DirectConnect 25 октября 2012 г. (последняя версия)
Служба каталогов AWS Aws\DirectoryService 16 апреля 2015 г. (последняя)
AWS Elastic BeanstalkAws\ElasticBeanstalk 01. 12.2010 (последняя)
AWS Identity and Access Management Aws\Iam 08.05.2010 (последняя)
Импорт/экспорт AWS AWS\ImportExport 01.06.2010 (последняя)
Служба управления ключами AWS Aws\Kms 01.11.2014 (последняя)
AWS Lambda AWS\Lambda 31 марта 2015 г. (последняя)
AWS OpsWorks Aws\OpsWorks 18 февраля 2013 г. (последняя)
Служба токенов безопасности AWS Aws\Sts 15 июня 2011 г. (последняя)
Шлюз хранилища AWS Aws\StorageGateway 30 июня 2013 г. (последняя версия)
Служба поддержки AWS Служба поддержки AWS 15 апреля 2013 г. (последняя)
Amazon CloudFront Aws\CloudFront 28 января 2016 г. (последняя версия), 05 мая 2012 г.
Amazon CloudHSM Aws\CloudHsm 30 мая 2014 г. (последняя)
Amazon CloudSearch Aws\CloudSearch 01.01.2013 (последняя), 01.02.2011
Домен Amazon CloudSearch Aws\CloudSearchDomain 01.01.2013 (последняя)
Amazon CloudWatch Aws\CloudWatch 01.08.2010 (последняя)
Журналы Amazon CloudWatch Aws\CloudWatchLogs 28 марта 2014 г. (последняя)
Amazon Cognito Identity Aws\CognitoIdentity 30 июня 2014 г. (последняя)
Amazon Cognito Sync Aws\CognitoSync 30 июня 2014 г. (последняя)
Amazon DynamoDB Aws\DynamoDb 10 августа 2012 г. (последняя), 05 декабря 2011 г.
Потоки Amazon DynamoDB Aws\DynamoDbStreams2012-08-10 (последняя)
Amazon EC2 Container Service Aws\Ecs 13 ноября 2014 г. (последняя)
Amazon ElastiCache Aws\ElastiCache 02 февраля 2015 г. (последняя)
Amazon Elastic Compute Cloud Aws\Ec2 01.10.2015 (последняя)
Amazon Elastic File System Aws\ElasticFileSystem 01.02.2015 (последняя)
Amazon Elastic MapReduce Aws\Emr 31 марта 2009 г. (последняя версия)
Amazon Elastic Transcoder Aws\ElasticTranscoder 25 сентября 2012 г. (последняя версия)
Ледник Амазонки Aws\Glacier 01.06.2012 (последняя)
Amazon Kinesis Aws\Kinesis 02.12.2013 (последняя)
Машинное обучение Amazon Aws\MachineLearning2014-12-12 (последняя)
Amazon Redshift Aws\Redshift 01.12.2012 (последняя)
Служба реляционной базы данных Amazon Aws\Rds 31 октября 2014 г. (последняя)
Amazon Route 53 Aws\Route53 01.04.2013 (последняя)
Amazon Route 53 домена Aws\Route53Domains 15 мая 2014 г. (последняя)
Amazon Simple Email Service Aws\Ses 01.12.2010 (последняя)
Amazon Simple Notification Service Aws\Sns 31 марта 2010 г. (последняя)
Amazon Simple Queue Service Aws\Sqs 05.11.2012 (последняя)
Amazon Simple Storage Service Aws\S3 01.03.2006 (последняя)
Amazon Simple Systems Management Service Aws\Ssm 06.11.2014 (последняя)
Amazon Simple Workflow Service Aws\Swf 25 января 2012 г. (последняя версия)
Amazon SimpleDB Aws\SimpleDb 15 апреля 2009 г. (последняя)
Amazon WorkSpaces Aws\WorkSpaces 08.

This entry was posted in Популярное