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

我有一个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; } 

任何想法,我需要改变,从响应中删除头信息?

只需将CURLOPT_HEADER为false。

在curl调用之后做这个:

 $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $header = substr($response, 0, $header_size); $body = substr($response, $header_size); 

只是为了稍后使用,如果有其他人需要。 我陷入了同样的情况,但只需要删除标题文本,而不是内容。 我得到的回应是(包括空白):

 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中删除,直到保持空白:

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

那为我做了。

如果您正在使用nuSoap ,则可以使用$nsoap->responseData$nsoap->response来访问没有标题的数据(如果需要完整标题)。

以防万一有人需要。

如果由于某种原因你必须curl_setopt($ch, CURLOPT_HEADER, 1); 以获得cookies为例,以下为我工作。 不确定是否100%可靠,但值得一试

 $foo = preg_replace('/HTTP(.*)html/s',"",$curlresult); 

对于false,将CURLOPT_HEADER的值更新为0

 curl_setopt($ch, CURLOPT_HEADER, 0); 

只是不要设置CURLOPT_HEADER

只要不在curl请求中设置curl_header或将其设置为z or false
喜欢这个
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HEADER, false);