我在这里使用PHP。
我想提取特定行号下面的文字。我想要这样做的原因是从CURL响应中删除HTTP标头信息。
以下是样本回复数据中的一些代码:
HTTP/1.1 203 OK
Date: Tue, 23 Aug 2011 20:56:41 GMT
Server: Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.5
Set-Cookie: PHPSESSID=ke0uv5bm0mqjn3i3jad6n20co4; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Test-Header: This is my test header
Content-Length: 24
Content-Type: text/html
This is the get response
我想要做的是删除所有标题信息并仅返回我的内容,即“这是我的回复”。
我已经使用正则表达式成功完成了这项工作,但我想做一些简单的事情,清除主响应上方的内容,而不是匹配标题内容,然后用空格替换。
有什么想法吗?
感谢。
答案 0 :(得分:4)
你不想要标题?告诉cURL不要给你标题:
$ch1 = curl_init();
// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com");
curl_setopt($ch1, CURLOPT_HEADER, 0);
答案 1 :(得分:0)
我会使用file()
。例如,您可以这样做:
$URL = 'www.whatever.com';
$URL = file($URL);
$count = count($URL);
$line_number = 15; // for example
for($I=$line_number; $I<=$count; $I++){
echo $URL[$I];
}
希望有效。
答案 2 :(得分:0)
如果您仍然需要标题,可以单独从cURL
获取标题$url = 'http://www.example.com';
print_r(get_headers($url)); //returns headers array
并使用
执行您的cURL$ch1 = curl_init();
// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, $url);
curl_setopt($ch1, CURLOPT_HEADER, 0);
如上所述
(可能不是很快但可能不适合重新指示)
答案 3 :(得分:0)
我做了一点探讨,这就是我想出的解决方案。
为了获得我的标题内容占用的行号数,我编写了以下代码:
$pattern_1_str = '/(http\/\d\.\d)\s+([\d]+)\s+([\w\-\/\'\"\(\)\\\. ]+)/i';
$pattern_2_str = '/([\w\-]+)\:\s+(.+)/i';
$matches_1_arr = array();
$matches_2_arr = array();
preg_match_all($pattern_1_str, $curl_response_res, $matches_1_arr);
preg_match_all($pattern_2_str, $curl_response_res, $matches_2_arr);
$line_count_1_str = count($matches_1_arr[0]);
$line_count_2_str = count($matches_2_arr[0]);
$line_num_offset_str = bcadd(1, bcadd($line_count_1_str, $line_count_2_str, 0), 0);
然后只获取内容,以下代码将执行此操作:
$val_str_arr = array();
$val_str_arr = explode("\n", trim($curl_response_res));
$line_num_int = intval($line_num_offset_str);
$val_str_slice_arr = array();
$val_str_slice_arr = array_slice($val_str_arr, $line_num_int);
$curl_response_content_only_str = implode("\n", $val_str_slice_arr);
$curl_response_res
是上述问题中提到的响应数据。
我不确定这段代码的效率如何,但对于来自CURL的简单且相对较短的响应数据,它看起来确实没问题。
感谢您的回复。