Как удалить заголовки HTTP из ответа CURL?


У меня есть php-скрипт, который возвращает только обычный текст без какого-либо html. Теперь я хочу сделать запрос cURL к этому скрипту, и я получаю следующий ответ:

HTTP/1.1 200 OK
Date: Mon, 28 Feb 2011 14:21:51 GMT
Server: Apache/2.2.14 (Ubuntu)
X-Powered-By: PHP/5.2.12-nmm2
Vary: Accept-Encoding
Content-Length: 6
Content-Type: text/html

6.8320

На самом деле ответ просто 6.8320 как текст без какого-либо html. Я хочу извлечь его из приведенного выше ответа, просто удалив информацию заголовка.

Я уже немного уменьшил сценарий:

$url = $_GET['url'];

if ( !$url ) {

  // Passed url not specified.
  $contents = 'ERROR: url not specified';
  $status = array( 'http_code' => 'ERROR' );

} else if ( !preg_match( $valid_url_regex, $url ) ) {

  // Passed url doesn't match $valid_url_regex.
  $contents = 'ERROR: invalid url';
  $status = array( 'http_code' => 'ERROR' );

} else {
  $ch = curl_init( $url );

  if ( strtolower($_SERVER['REQUEST_METHOD']) == 'post' ) {
    curl_setopt( $ch, CURLOPT_POST, true );
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $_POST );
  }

  curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
  curl_setopt( $ch, CURLOPT_HEADER, true );
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

  curl_setopt( $ch, CURLOPT_USERAGENT, $_GET['user_agent'] ? $_GET['user_agent'] : $_SERVER['HTTP_USER_AGENT'] );

  list( $header, $contents ) = preg_split( '/([\r\n][\r\n])\\1/', curl_exec( $ch ), 2 );

  $status = curl_getinfo( $ch );

  curl_close( $ch );
}

// Split header text into an array.
$header_text = preg_split( '/[\r\n]+/', $header );

if ( true ) {
  if ( !$enable_native ) {
    $contents = 'ERROR: invalid mode';
    $status = array( 'http_code' => 'ERROR' );
  }

  // Propagate headers to response.
  foreach ( $header_text as $header ) {
    if ( preg_match( '/^(?:Content-Type|Content-Language|Set-Cookie):/i', $header ) ) {
      header( $header );
    }
  }
  print $contents;
}

Любая идея, что мне нужно изменить, чтобы удалить информацию заголовка из ответ?

Author: Artjom Zabelin, 2011-02-28

8 answers

Просто установите CURLOPT_HEADER в значение false.

 65
Author: Ewan Heming, 2012-08-17 14:06:05

Сделайте это после вызова curl:

$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
 39
Author: Roeland Werring, 2014-11-07 18:43:54

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

HTTP/1.1 200 OK
Cache-Control: private, no-cache, no-store, must-revalidate
Content-Language: en
Content-Type: text/html
Date: Tue, 25 Feb 2014 20:59:29 GMT
Expires: Sat, 01 Jan 2000 00:00:00 GMT
Pragma: no-cache
Server: nginx
Vary: Cookie, Accept-Language, Accept-Encoding
transfer-encoding: chunked
Connection: keep-alive

Я хотел удалить начиная с HTTP до keep-alive с пробелом:

$contents = preg_replace('/HTTP(.*)alive/s',"",$contents);

Это сделало для меня.

 4
Author: Medalist, 2014-02-25 21:03:28

Обновите значение CURLOPT_HEADER до 0 для false

curl_setopt($ch, CURLOPT_HEADER, 0);
 2
Author: Yaco Zaragoza, 2015-01-26 19:16:13

Если вы используете nuSoap, вы можете получить доступ к данным без заголовков с помощью $nsoap->responseData или $nsoap->response, если вам нужны полные заголовки.

На всякий случай, если кому-то это понадобится.

 1
Author: Peon, 2012-10-19 07:14:10

Если по какой-то причине вам нужно curl_setopt($ch, CURLOPT_HEADER, 1);, например, получить файлы cookie, для меня сработало следующее. Не уверен, что это на 100% надежно, но стоит попробовать

$foo = preg_replace('/HTTP(.*)html/s',"",$curlresult);
 1
Author: superjaz1, 2013-11-27 13:22:22

Просто не устанавливайте CURLOPT_HEADER!

 -2
Author: rik, 2011-02-28 14:05:13

Просто не устанавливайте curl_header в запросе curl или не устанавливайте его в z or false
вот так
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HEADER, false);

 -2
Author: Shaibi Rana, 2013-02-13 07:26:10