如何在php中获取远程域的HTTP状态代码?
我想创建一个批处理脚本,在一个数据库中遍历20000个链接,并删除所有404等等。如何获取远程url的HTTP状态码如何在php中获取远程域的HTTP状态代码?,php,Php,我想创建一个批处理脚本,在一个数据库中遍历20000个链接,并删除所有404等等。如何获取远程url的HTTP状态码 最好不要使用curl,因为我没有安装它 卷发很完美,但既然你没有卷发,你就得趴下来,用牙套把头发弄脏。技术是: 打开服务器的套接字 发送HTTP头请求 解析响应 下面是一个简单的例子: <?php $url = parse_url('http://www.example.com/index.html'); $host = $url['host']; $port = $u
最好不要使用curl,因为我没有安装它 卷发很完美,但既然你没有卷发,你就得趴下来,用牙套把头发弄脏。技术是:
<?php
$url = parse_url('http://www.example.com/index.html');
$host = $url['host'];
$port = $url['port'];
$path = $url['path'];
$query = $url['query'];
if(!$port)
$port = 80;
$request = "HEAD $path?$query HTTP/1.1\r\n"
."Host: $host\r\n"
."Connection: close\r\n"
."\r\n";
$address = gethostbyname($host);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, $address, $port);
socket_write($socket, $request, strlen($request));
$response = split(' ', socket_read($socket, 1024));
print "<p>Response: ". $response[1] ."</p>\r\n";
socket_close($socket);
?>
更新:我添加了几行代码来解析URL看起来它有一个非常好的设置,可以使用curl或fsockopen下载页面,并且可以使用任意一种方法获取HTTP头(这是您真正想要的)
使用该方法后,您需要检查$output['info']['http_code']以获取所需的数据
希望对您有所帮助。您可以使用PEAR的HTTP::head函数。
如果我没有弄错,php内置函数都不会返回远程url的http状态,因此最好的选择是使用套接字打开与服务器的连接,发送请求并解析响应状态: 伪代码:
parse url => $host, $port, $path
$http_request = "GET $path HTTP/1.0\nHhost: $host\n\n";
$fp = fsockopen($host, $port, $errno, $errstr, $timeout), check for any errors
fwrite($fp, $request)
while (!feof($fp)) {
$headers .= fgets($fp, 4096);
$status = <parse $headers >
if (<status read>)
break;
}
fclose($fp)
parse url=>$host、$port、$path
$http\u request=“GET$path http/1.0\nHhost:$host\n\n”;
$fp=fsockopen($host、$port、$errno、$errstr、$timeout),检查是否有任何错误
fwrite($fp,$request)
而(!feof($fp)){
$headers.=fgets($fp,4096);
$status=
如果()
打破
}
fclose($fp)
另一个选择是在php中使用一个已经构建好的http客户机类,该类可以返回标题而不获取整个页面内容,网络上应该有一些开源类…我相信是:。我会纠正这个小错误。我应该指出,并不是所有的web服务器都支持或启用HEAD请求,即使命中HEAD请求的几率接近于零。。。