如何从CURL响应中删除HTTP标头?

Upv*_*ote 50 php curl http-headers

我有一个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
Run Code Online (Sandbox Code Playgroud)

实际响应只有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;
}
Run Code Online (Sandbox Code Playgroud)

知道我需要更改什么来从响应中删除标头信息?

Ewa*_*ing 79

只是设置CURLOPT_HEADER为false.


小智 48

在你的卷曲电话之后这样做:

$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
Run Code Online (Sandbox Code Playgroud)

  • 这节省了我的一天.谢谢. (2认同)
  • 这应该是选定的答案.您可以保留详细信息,但不会将其显示在结果中.如果你确实需要它们,那就好比没有它们好(在我的情况下我需要它们). (2认同)

Yac*_*oza 5

将 CURLOPT_HEADER 的值更新为 0 为假

curl_setopt($ch, CURLOPT_HEADER, 0);
Run Code Online (Sandbox Code Playgroud)

  • 这是完美的答案! (2认同)