我有一个脚本,通过cURL提交一个POST请求到外部网站,并期望收到一个文件作为回应。但是,如果出现错误,该网站将返回一个HTML错误页面,而不是预期的文件。如何使用正则表达式测试,如果一个字符串包含一个HTML页
我有响应存储在一个字符串,我想检查如果字符串包含HTML页面,如果没有,我们可以假设字符串包含请求的文件数据。
我无法创建正则表达式来测试字符串是否为HTML页面。我想测试下:
数据具有先导开口HTML标签:
<\s*html.*>
数据具有后续打开身体标记:
<\s*body.*>
的数据有后续关闭机构标记:
<\/\s*body.*>
该数据有一个随后的结束HTML标记:
<\/\s*html.*>
我试过如下:
function isHTMLPage($data) {
$html_file_regex = '/<\s*html.*>.*<\s*body.*>.*<\/\s*body.*>.*.<\/\s*html.*>/';
return preg_match($html_file_regex, strtolower($data)) === 1;
}
函数返回false(不匹配)在下面的测试数据:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test Page</title>
</head>
<body>
<div>test Content</div>
</body>
</html>
什么是错的我正则表达式?
/<\s*html.*>.*<\s*body.*>.*<\/\s*body.*>.*.<\/\s*html.*>/
这可能比您想象的要简单; Content-Type标题返回什么(在不同的结果之间)?例如如果服务通常返回json,你应该看到'application/json',但错误页面会切换到'text/html'。 –
我不确定你的目的,但不解析HTML使用HTML DOM解析器 –
它是标准的HTML取回失败的HTML页面,例如,一个404页面。这仍然是一个有效的HTML页面,但它只会说一些版本的“文件未找到”。您应该检查http状态代码。 –