У меня есть 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,883 как текст без какого-либо 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.
Сделайте это после вашего звонка:
$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, до keep-alive с пробелом:
$contents = preg_replace('/HTTP(.*)alive/s',"",$contents);
это было для меня.
Если вы используете nuSoap
, вы можете получить доступ к данным без заголовков с помощью $nsoap->responseData
или $nsoap->response
, если вы хотите получить полные заголовки.
На всякий случай кому-то это нужно.
Если по какой-то причине вам придется curl_setopt($ch, CURLOPT_HEADER, 1);
для получения файлов cookie, например, для меня работали. Не уверен, что он на 100% надежный, но стоит попробовать
$foo = preg_replace('/HTTP(.*)html/s',"",$curlresult);
Обновите значение CURLOPT_HEADER до 0 для false
curl_setopt($ch, CURLOPT_HEADER, 0);
Просто не устанавливайте CURLOPT_HEADER
!
Просто не устанавливайте curl_header
в запросе curl или не устанавливайте его в z or false
как это
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HEADER, false);