Посмотреть ошибки curl

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

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

Описание

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

handle

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

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

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

Список изменений

Версия Описание
8.0.0 handle теперь ожидает экземпляр CurlHandle;
раньше, ожидался ресурс (resource).

Примеры

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

<?php
// Создаём дескриптор 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);
?>

patrick at ibuildings dot nl

10 years ago

If you want to fetch the error message, make sure you fetch it before you close the current cURL session or the error message will be reset to an empty string.

paul at paulmcgarry dot com

14 years ago

For a 404 response to actually trigger an error as the example seems to be trying to demonstrate the following option should be set:

curl_setopt($ch,CURLOPT_FAILONERROR,true);

As per http://curl.haxx.se/libcurl/c/libcurl-errors.html

CURLE_HTTP_RETURNED_ERROR (22)
This is returned if CURLOPT_FAILONERROR is set TRUE and the HTTP server returns an error code that is >= 400. (This error code was formerly known as CURLE_HTTP_NOT_FOUND.)

Anonymous

2 years ago

If you're using curl_multi and there's an error, curl_error() will remain empty until you've called curl_multi_info_read(). That function "pumps" the information inside the curl libraries to the point where curl_error() will return a useful string.

This should really be added to the documentation, because it's not at all obvious.

anrdaemon at freemail dot ru

4 years ago

curl_error is not a textual representation of curl_errno.
It's an actual error *message*.
If you want textual representation of error *code*, look for curl_strerror.

you can generate curl error after its execution

$url = 'http://example.com';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
if(curl_errno($ch)){
    echo 'Request Error:' . curl_error($ch);
}

and here are curl error code

if someone need more information about curl errors

<?php

    $error_codes=array(
    [1] => 'CURLE_UNSUPPORTED_PROTOCOL',
    [2] => 'CURLE_FAILED_INIT',
    [3] => 'CURLE_URL_MALFORMAT',
    [4] => 'CURLE_URL_MALFORMAT_USER',
    [5] => 'CURLE_COULDNT_RESOLVE_PROXY',
    [6] => 'CURLE_COULDNT_RESOLVE_HOST',
    [7] => 'CURLE_COULDNT_CONNECT',
    [8] => 'CURLE_FTP_WEIRD_SERVER_REPLY',
    [9] => 'CURLE_REMOTE_ACCESS_DENIED',
    [11] => 'CURLE_FTP_WEIRD_PASS_REPLY',
    [13] => 'CURLE_FTP_WEIRD_PASV_REPLY',
    [14]=>'CURLE_FTP_WEIRD_227_FORMAT',
    [15] => 'CURLE_FTP_CANT_GET_HOST',
    [17] => 'CURLE_FTP_COULDNT_SET_TYPE',
    [18] => 'CURLE_PARTIAL_FILE',
    [19] => 'CURLE_FTP_COULDNT_RETR_FILE',
    [21] => 'CURLE_QUOTE_ERROR',
    [22] => 'CURLE_HTTP_RETURNED_ERROR',
    [23] => 'CURLE_WRITE_ERROR',
    [25] => 'CURLE_UPLOAD_FAILED',
    [26] => 'CURLE_READ_ERROR',
    [27] => 'CURLE_OUT_OF_MEMORY',
    [28] => 'CURLE_OPERATION_TIMEDOUT',
    [30] => 'CURLE_FTP_PORT_FAILED',
    [31] => 'CURLE_FTP_COULDNT_USE_REST',
    [33] => 'CURLE_RANGE_ERROR',
    [34] => 'CURLE_HTTP_POST_ERROR',
    [35] => 'CURLE_SSL_CONNECT_ERROR',
    [36] => 'CURLE_BAD_DOWNLOAD_RESUME',
    [37] => 'CURLE_FILE_COULDNT_READ_FILE',
    [38] => 'CURLE_LDAP_CANNOT_BIND',
    [39] => 'CURLE_LDAP_SEARCH_FAILED',
    [41] => 'CURLE_FUNCTION_NOT_FOUND',
    [42] => 'CURLE_ABORTED_BY_CALLBACK',
    [43] => 'CURLE_BAD_FUNCTION_ARGUMENT',
    [45] => 'CURLE_INTERFACE_FAILED',
    [47] => 'CURLE_TOO_MANY_REDIRECTS',
    [48] => 'CURLE_UNKNOWN_TELNET_OPTION',
    [49] => 'CURLE_TELNET_OPTION_SYNTAX',
    [51] => 'CURLE_PEER_FAILED_VERIFICATION',
    [52] => 'CURLE_GOT_NOTHING',
    [53] => 'CURLE_SSL_ENGINE_NOTFOUND',
    [54] => 'CURLE_SSL_ENGINE_SETFAILED',
    [55] => 'CURLE_SEND_ERROR',
    [56] => 'CURLE_RECV_ERROR',
    [58] => 'CURLE_SSL_CERTPROBLEM',
    [59] => 'CURLE_SSL_CIPHER',
    [60] => 'CURLE_SSL_CACERT',
    [61] => 'CURLE_BAD_CONTENT_ENCODING',
    [62] => 'CURLE_LDAP_INVALID_URL',
    [63] => 'CURLE_FILESIZE_EXCEEDED',
    [64] => 'CURLE_USE_SSL_FAILED',
    [65] => 'CURLE_SEND_FAIL_REWIND',
    [66] => 'CURLE_SSL_ENGINE_INITFAILED',
    [67] => 'CURLE_LOGIN_DENIED',
    [68] => 'CURLE_TFTP_NOTFOUND',
    [69] => 'CURLE_TFTP_PERM',
    [70] => 'CURLE_REMOTE_DISK_FULL',
    [71] => 'CURLE_TFTP_ILLEGAL',
    [72] => 'CURLE_TFTP_UNKNOWNID',
    [73] => 'CURLE_REMOTE_FILE_EXISTS',
    [74] => 'CURLE_TFTP_NOSUCHUSER',
    [75] => 'CURLE_CONV_FAILED',
    [76] => 'CURLE_CONV_REQD',
    [77] => 'CURLE_SSL_CACERT_BADFILE',
    [78] => 'CURLE_REMOTE_FILE_NOT_FOUND',
    [79] => 'CURLE_SSH',
    [80] => 'CURLE_SSL_SHUTDOWN_FAILED',
    [81] => 'CURLE_AGAIN',
    [82] => 'CURLE_SSL_CRL_BADFILE',
    [83] => 'CURLE_SSL_ISSUER_ERROR',
    [84] => 'CURLE_FTP_PRET_FAILED',
    [84] => 'CURLE_FTP_PRET_FAILED',
    [85] => 'CURLE_RTSP_CSEQ_ERROR',
    [86] => 'CURLE_RTSP_SESSION_ERROR',
    [87] => 'CURLE_FTP_BAD_FILE_LIST',
    [88] => 'CURLE_CHUNK_FAILED');

    ?>

Вернуться к: cURL

curl_error

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

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

Описание

string curl_error
( resource $ch
)

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

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

ch

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

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

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

Примеры

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


<?php
// Создаем дескриптор curl к несуществующему адресу
$ch curl_init('http://404.php.net/');
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);

if(

curl_exec($ch) === false)
{
    echo 
'Ошибка curl: ' curl_error($ch);
}
else
{
    echo 
'Операция завершена без каких-либо ошибок';
}
// Закрываем дескриптор
curl_close($ch);
?>

Вернуться к: cURL

Уровень сложности
Простой

Время на прочтение
7 мин

Количество просмотров 15K

Введение

cURL — библиотека с открытым исходным кодом, используемая для отправки HTTP-запросов с различных языков программирования, включая C, PHP и другие.

cURL также является программой командной строки, позволяющая взаимодействовать с множеством различных серверов.
Libcurl — это библиотека API для передачи, которую разработчики могут встроить в свои программы; cURL действует как автономная обёртка для библиотеки libcurl. Для libcurl имеются модули интеграции для работы с более чем 30 языками программирования.

cURL работает по множеству различных протоколов с синтаксисом URL. В данной статье рассмотрена работа библиотеки по протоколу HTTP/HTTPS.

Содержание:

  • Настройка параметров сеанса

  • Простой GET-запрос

  • Простой POST-запрос

  • Обработка исключений/ошибок

  • Пример POST-запроса с телом формате JSON, обработкой исключений, и обработкой ответа от сервера

  • Проверка SSL-сертификата

  • Аутентификация на сервере

Модуль PHP cURL обычно включён по умолчанию. Если это не так, то в файле php.ini уберите точку с запятой (;) у строки extension=php_curl.dll.

Настройка параметров сеанса

Для установки параметра сеанса cURL используется функция curl_setopt.

<?php
  curl_setopt(CurlHandle $handle, int $option, mixed $value): bool
  • handle — дескриптор  cURL, полученный из curl_init().

  • option — параметр сеанса в виде CURLOPT_XXX.

  • value — значение параметра option.

Функция возвращает true в случае успешного выполнения или false в случае возникновения ошибки.

Сразу несколько параметров сеанса можно установить с помощью функции curl_setopt_array.

<?php
  curl_setopt_array(CurlHandle $handle, array $options): bool

options — ассоциативный массив, определяющий устанавливаемые параметры и их значения. Ключи должны быть корректными константами для функции curl_setopt() или их целочисленными эквивалентами.
Функция возвращает true, если все параметры были успешно установлены. Если не удалось успешно установить какой-либо параметр, немедленно возвращается значение false, все последующие параметры игнорируются.

Роль параметров сеанса играют предопределённые константы. Рассмотрим основные из них.

CURLOPT_URL — параметр, который задает адрес ресурса, с которым вы хотите взаимодействовать или с которого хотите получить данные. Параметр является обязательным и должен быть установлен перед вызовом curl_exec().

CURLOPT_RETURNTRANSFER — константа, устанавливающая значение дескриптора cURL так, чтобы ответ от сервера возвращался в виде строкового значения вместо отправки непосредственно в поток вывода.
При установке CURLOPT_RETURNTRANSFER в значение true или 1, константа сообщает cURL вернуть ответ из HTTP-запроса в виде строки, которую затем можно сохранить в переменной или обработать по мере необходимости. Если этот параметр не задан или имеет значение false, ответ на HTTP-запрос будет отправлен непосредственно в поток вывода (например, в окно браузера или файл, установленный параметром CURLOPT_FILE).

CURLOPT_HEADER — параметр, который указывает, следует ли включать заголовок в ответ (true — для включения).Заголовок содержит информацию об ответе, такую как код состояния HTTP, тип содержимого и др.
Для получения информации об ответе также можно использовать функцию curl_getinfo()(будет рассмотрена позже в статье).

CURLOPT_HTTPHEADER — параметр cURL, который задает HTTP-заголовки, отправляемые вместе с запросом. Параметр принимает массив строк. Каждая строка должна содержать имя заголовка и его значение, разделенные двоеточием.

CURLOPT_FOLLOWLOCATION — константа, которая используется для настройки поведения cURL в случае, если сервер возвращает заголовок «Location» как часть ответа, код состояния которого находится в диапазоне 300 – 399 (сообщения о перенаправлении). Заголовок «Location» содержит в себе URL для редиректа.
Когда CURLOPT_FOLLOWLOCATION установлена в значение 1, cURL будет автоматически следовать любым редиректам, делая дополнительные запросы к новому URL до тех пор, пока в ответе не будет содержаться заголовок «Location». Значение по умолчанию — 0.

CURLOPT_POST — константа, указывающая, следует ли отправлять запрос методом POST. По умолчанию cURL отправляет GET-запросы. Если CURLOPT_POST установлен в значении 1 или true, то будет отправлен POST-запрос.

CURLOPT_POSTFIELDS — это параметр cURL, используемый для установки тела POST-запроса. Формат данных зависит от типа, указанного в заголовке Content-Type.

Простой GET-запрос

<?php
    // Инициализация сеанса cURL
    $ch = curl_init();
    // Установка URL
    curl_setopt($ch, CURLOPT_URL, "example.com");
    // Установка CURLOPT_RETURNTRANSFER (вернуть ответ в виде строки)
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    // Выполнение запроса cURL
	//$output содержит полученную строку
    $output = curl_exec($ch);
    // закрытие сеанса curl для освобождения системных ресурсов
    curl_close($ch);      
?>

Простой POST-запрос

Чтобы сделать POST-запрос, нужно установить параметры CURLOPT_POST и CURLOPT_POSTFIELDS.

<?php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://www.example.com/api/resource");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "name=value");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $output = curl_exec($ch);
    curl_close($ch);
    echo $output;
?>

Существует несколько форматов тела запроса:

1) Формат JSON

<?php
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json');
    curl_setopt($ch, CURLOPT_POSTFIELDS,"{key1:value1,key2:value2}");
?>

2) Строка запроса HTTP

<?php
    curl_setopt($ch, CURLOPT_POSTFIELDS,"key1=value1&key2=value2");
?>

Для построения строки запроса используется функция http_build_query.

3) Формат массива POST

<?php 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data');
    curl_setopt($ch, CURLOPT_POSTFIELDS, array("key1"=>"value1", "key2"=>"value2");
?>

Для отправки файлов в тело запроса применяется класс CURLFile. Чтобы создать экземпляр класса можно воспользоваться конструктором или функцией curl_file_create. Экземпляр класса передаётся константе CURLOPT_POSTFIELDS как элемент массива.

Обработка исключений/ошибок

Обработка ошибок в ходе сеанса cURL осуществляется с помощью функций curl_errno и curl_error, которые фиксируют любые ошибки, возникающие во время сеанса.

curl_errno — принимает дескриптор cURL, полученный из curl_init() и возвращает номер ошибки последней операции cURL.

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

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

Пример POST-запроса с телом формате JSON, обработкой исключений, и обработкой ответа от сервера

<?php
    // Определение параметров сеанса
    $CurlOptions = array(
        CURLOPT_URL 		   => 'http://domain-name/endpoint-path',
        CURLOPT_POST           => 1,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_FOLLOWLOCATION => 1,
        CURLOPT_HTTPHEADER     => array( 'Content-Type' => 'application/json' )
    );
        
    // Сериализация тела запроса
    $data = array('field1' => 'value1', 'field2' => 'value2');
    $json_req = json_encode($data);
    // Установка тела запроса
    $CurlOptions[CURLOPT_POSTFIELDS] = $json_req;
        
    // Инициализация сеанса
    $ch = curl_init();    
    // установка параметров сеанса
    curl_setopt_array( $ch, $CurlOptions );
    // Выполнение запроса, в переменной хранится ответ от сервера
    $data = curl_exec( $ch );
        
    //получение информацию о сеансе
    $info = curl_getinfo($ch);
        
    // если в ходе сеанса произошла ошибка  
    // или если код HTTP-ответа не в диапазоне 200 – 299 (успешные запросы)
    if (curl_errno($ch) || substr($info['http_code'],0,1) !== '2') {
        // вызов пользовательского исключения
        throw new CustomException(curl_error($ch), $data, $info);
    }
    
    // закрытие сеанса
    curl_close( $ch );
?>

В данном примере информация о последнем сеансе была получена с помощью функции curl_getinfo(). Функция возвращает массив информации о различных характеристиках сеанса, таких как код ответа HTTP, тип содержимого, общее время и т.д.

Проверка SSL-сертификата

Для проверки SSL-сертификата необходимо использовать константу CURLOPT_SSL_VERIFYPEER.

CURLOPT_SSL_VERIFYPEER — это константа, которая определяет, должен ли curl проверять подлинность SSL-сертификата. Если установлено значение true, curl проверяет SSL-сертификат, представленный удаленным сервером, и выдаёт ошибку, если это сертификат недействительный Если установлено значение false, curl не проверяет SSL-сертификат и разрешает подключение, даже если SSL-сертификат недействителен. Однако это может привести к уязвимостям в системе безопасности. По умолчанию установлено значение true.

CURLOPT_SSL_VERIFYPEER работает только для SSL-соединений, при подключении к http-серверам константа будет проигнорирована.

Аутентификация на сервере

CURLOPT_HTTPAUTH — это константа, которая используется для установки типа HTTP-аутентификации, используемой для запроса.

<?php
    $CurlOptions = array(
      CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
      CURLOPT_USERPWD => "login:password");
?>

Константа принимает следующие значения:

  • CURLAUTH_BASIC: Базовая аутентификация HTTP, которая отправляет имя пользователя и пароль по сети в виде обычного текста, легко перехватываемого другими.

  • CURLAUTH_DIGEST: Аутентификация HTTP Digest, которая использует хэш-функцию для шифрования пароля перед отправкой его на сервер.

  • CURLAUTH_GSSNEGOTIATE: HTTP GSS-Negotiate аутентификация, которая является способом обеспечения безопасной аутентификации с использованием Kerberos.

  • CURLAUTH_NTLM: Аутентификация NTLM, которая представляет собой механизм запроса-ответа, используемый Windows. В данном случае используется концепция хэширования, аналогичная Digest, чтобы предотвратить перехват пароля.

  • CURLAUTH_ANY: Сообщает cURL попробовать все поддерживаемые методы аутентификации. cURL автоматически выберет тот, который он сочтет наиболее безопасным.

  • CURLAUTH_ANYSAFE: Работает аналогично CURLAUTH_ANY, но в этом случае cURL будет пробовать только безопасные методы (все методы кроме CURLAUTH_BASIC).

Значение по умолчанию: CURLAUTH_BASIC.

Значения могут быть объединены с помощью побитового ИЛИ. Например, CURLAUTH_BASIC | CURLAUTH_DIGEST. cURL выберет наиболее подходящий метод из представленных.

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

ИТОГ

cURL — удобная библиотека для передачи данных между клиентом и сервером. cURL позволяет взаимодействовать с множеством различных серверов по различным протоколам: http, https, ftp, gopher, telnet, dict, file и ldap.

Библиотека легка в использовании. cURL предоставляет инструменты для простых GET-запросов, но также имеет дополнительный функционал:

  • работа с сертификатами HTTPS;

  • загрузка файлов по протоколам HTTP и FTP (последнее можно сделать с помощью модуля FTP);

  • использование прокси-серверы;

  • cookies;

  • аутентификация пользователей.

I’m using curl at the command line on Linux to issue HTTP requests. The response bodies are printed to standard out, which is fine, but I can’t see from the man page how to get curl to print the HTTP status code from the response (404, 403 etc). Is this possible?

asked Apr 18, 2011 at 10:28

kdt's user avatar

4

This should work for you if the web server is able to respond to HEAD requests (this will not perform a GET request):

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

As an addition, to let cURL follow redirects (3xx statuses) add -L.

Wouter's user avatar

Wouter

1391 silver badge8 bronze badges

answered Apr 18, 2011 at 10:56

pberlijn's user avatar

pberlijnpberlijn

9,6101 gold badge15 silver badges8 bronze badges

13

A more specific way to print out just the HTTP status code is something along the lines of:

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

A lot easier to work with in scripts, as it doesn’t require any parsing :-)

The parameter -I might be added to improve response load performance. This will change the call to a HEAD call which will fetch response overhead only, without the body.

Note: %{http_code} returns on first line of HTTP payload (available variables for the -w option on the curl documentation page)

i.e.:

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

Nate Anderson's user avatar

answered Jun 28, 2012 at 0:25

pvandenberk's user avatar

pvandenberkpvandenberk

14.2k2 gold badges13 silver badges3 bronze badges

22

You can print the status code, in addition to all the headers by doing the following:

curl -i http://example.org

The good thing about -i is that it works with -X POST as well.

answered Dec 4, 2012 at 20:45

Cyril David's user avatar

Cyril DavidCyril David

4,8271 gold badge12 silver badges2 bronze badges

7

If you want to see the header as well as the result you can use the verbose option:

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

The status will appear in the header. E.g.

< Date: Tue, 04 Nov 2014 19:12:59 GMT
< Content-Type: application/json; charset=utf-8
< Status: 422 Unprocessable Entity

Dennis's user avatar

Dennis

4525 silver badges14 bronze badges

answered May 3, 2012 at 4:28

Enrico Susatyo's user avatar

Enrico SusatyoEnrico Susatyo

3,5162 gold badges19 silver badges20 bronze badges

4

If you want to capture the HTTP status code in a variable, but still redirect the content to STDOUT, you must create two STDOUTs. You can do so with process substitution >() and command substitution $().

First, create a file descriptor 3 for your current process’ STDOUT with exec 3>&1.

Then, use curl’s -o option to redirect the response content to a temporary fifo using command substitution, and then within that command substitution, redirect output back to your current process STDOUT file descriptor 3 with -o >(cat >&3).

Putting it all together in bash 3.2.57(1)-release (standard for macOS):

# creates a new file descriptor 3 that redirects to 1 (STDOUT)
exec 3>&1 
# Run curl in a separate command, capturing output of -w "%{http_code}" into HTTP_STATUS
# and sending the content to this command's STDOUT with -o >(cat >&3)
HTTP_STATUS=$(curl -w "%{http_code}" -o >(cat >&3) 'http://example.com')

Note that this doesn’t work in /bin/sh as SamK noted in the comments below.

answered Jan 8, 2015 at 20:59

Heath Borders's user avatar

9

Redefine curl output:

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

Can be used with any request type.

answered Aug 5, 2014 at 18:18

Grzegorz Luczywo's user avatar

2

Status code ONLY

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

All credit to this GIST

answered Feb 8, 2017 at 10:44

mahatmanich's user avatar

mahatmanichmahatmanich

6455 silver badges7 bronze badges

2

This is a painful curl --fail limitation. From man curl :

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

But there is no way to get both the non-zero return code AND the response body in stdout.

Based on pvandenberk’s answer and this other very useful trick learned on SO, here is a workaround :

curl_with_error_code () {
    _curl_with_error_code "$@" | sed '$d'
}
_curl_with_error_code () {
    local curl_error_code http_code
    exec 17>&1
    http_code=$(curl --write-out '\n%{http_code}\n' "$@" | tee /dev/fd/17 | tail -n 1)
    curl_error_code=$?
    exec 17>&-
    if [ $curl_error_code -ne 0 ]; then
        return $curl_error_code
    fi
    if [ $http_code -ge 400 ] && [ $http_code -lt 600 ]; then
        echo "HTTP $http_code" >&2
        return 127
    fi
}

This function behaves exactly as curl, but will return 127 (a return code non-used by curl) in case of a HTTP code in the range [400, 600[.

Community's user avatar

answered Apr 6, 2016 at 13:08

Lucas Cimon's user avatar

Lucas CimonLucas Cimon

4824 silver badges11 bronze badges

3

This will send a request to url, get only the first line of the response, split it on blocks and select the second one.

It contains the response code

curl -I http://example.org 2>/dev/null | head -n 1 | cut -d$' ' -f2

OneCricketeer's user avatar

answered Jul 15, 2015 at 20:08

Filip Spiridonov's user avatar

2

For a POST request, the following worked:

curl -w 'RESP_CODE:%{response_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]'

answered Jan 7, 2016 at 8:36

zafar142003's user avatar

zafar142003zafar142003

2512 silver badges4 bronze badges

Use the following cURL command and pipe it to grep like so:

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

Here’s what each flag does:

  • -I: Show only response headers
  • -s: Silent — Don’t show progress bar
  • -L: Follow Location: headers

Here is a link to HTTP status codes.

Run from the command line. This curl runs in silent mode, follows any redirects, get the HTTP headers. grep will print the HTTP status code to standard output.

Cas's user avatar

Cas

1,9442 gold badges19 silver badges42 bronze badges

answered Nov 21, 2016 at 11:28

Savitoj Singh's user avatar

An example of how to use the response codes. I use this to re-download Geolite databases only if they have changed (-z) & also following redirects (-L):

url=http://example.com/file.gz
file=$(basename $url)

response=$(curl -L -s -o $file -z $file $url -w "%{http_code}")

case "$response" in
        200) do_something ;;
        301) do_something ;;
        304) printf "Received: HTTP $response (file unchanged) ==> $url\n" ;;
        404) printf "Received: HTTP $response (file not found) ==> $url\n" ;;
          *) printf "Received: HTTP $response ==> $url\n" ;;
esac

answered Apr 1, 2018 at 17:21

Stuart Cardall's user avatar

Here is some curl command that is using GET and that returns the HTTP code.

curl -so /dev/null -w '%{response_code}' http://www.example.org

Please remember that the approach below is using HEAD, which is faster but it may not work well with some web less compliant HTTP servers.

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

answered Jun 23, 2016 at 10:37

sorin's user avatar

sorinsorin

11.7k21 gold badges63 silver badges73 bronze badges

2

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

This will return the following information:

  1. response data, if any data is returned by API like error
  2. status code

answered Mar 8, 2017 at 5:12

srana's user avatar

sranasrana

611 silver badge2 bronze badges

2

Split output content to stdout and HTTP status code to stderr:

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

If only HTTP status code is desired to stderr, --silent can be used:

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

The desired stream can then be picked by redirecting unwanted one to /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
<!doctype html>
...

Note that for the second redirection to behave as desired, we need to run the curl command in subshell.

answered Jun 4, 2019 at 8:08

Jaakko's user avatar

JaakkoJaakko

3203 silver badges12 bronze badges

2

The OP wants to know the status code. Often when downloading a file you also want to get a feel of it’s size so I’m using curl first to show status code and size of file and then shut off verbose and direct file to the place and name I want:

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

Then I wait for the finishing of curl

wait ${!}

before I run the next command. The above when used in a script of many commands like above gives a nice response like:

http: 200 42824

http: 200 34728

http: 200 35452

Please note that -o in curl needs to be followed by the full path of the file + name of file. This allows you thusly to save files in a sensible name structure when you d/l them with curl. Also note that -s and -S used together silence the output but does show errors. Note also that -R tries to set the file timestamp to that of the web file.

My answer is based on what @pvandenberk originally suggested, but in addition it actually saves the file somewhere, instead of merely directing to /dev/null.

Community's user avatar

answered Oct 7, 2017 at 7:32

sakumatto's user avatar

$ curl -kv https://www.example.org 2>&1 | grep -i 'HTTP/1.1 ' | awk '{print $3}'| sed -e 's/^[ \t]*//'
  • 2>&1: error is stored in output for parsing
  • grep: filter the response code line from output
  • awk: filters out the response code from response code line
  • sed: removes any leading white spaces

answered Apr 14, 2021 at 4:44

Nitish Kumar's user avatar

There is another way by using Powershell command which is alias to curl.exe
Just type the following:

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

answered Jul 14, 2022 at 10:30

Dmitrii L's user avatar

In Windows PowerShell:

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

It’s really just an alias for Invoke-WebRequest though.

answered Sep 14, 2022 at 18:24

Kebman's user avatar

KebmanKebman

5152 gold badges5 silver badges13 bronze badges

You must log in to answer this question.

Not the answer you’re looking for? Browse other questions tagged

.

Понравилась статья? Поделить с друзьями:
  • Посмотреть ошибки опель астра h акпп
  • Посмотреть на предмет ошибок
  • Посмотреть текст на ошибки
  • Последняя ошибка undefined криптопро
  • Посмотреть код ошибки при перезагрузке