根据@JoyceBabu在这篇文章Get http-statuscode without body using cURL?上应该可以使用fsockopen获取URL的http状态代码。
所以我从@JoyceBabu那里获取了代码:
<?php
$fp = fsockopen("www.google.com", 80, $errno, $errstr, 30);
if ($fp) {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.google.com\r\n";
$out .= "Accept-Encoding: gzip, deflate, sdch\r\n";
$out .= "Accept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n";
$out .= "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36\r\n";
$out .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
$tmp = explode(' ', fgets($fp, 13));
echo $tmp[1];
fclose($fp);
}
然后我将URL更改为www.raffiniert.biz/aktuell:
<?php
$fp = fsockopen("www.raffiniert.biz", 80, $errno, $errstr, 30);
if ($fp) {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.raffiniert.biz/aktuell\r\n";
$out .= "Accept-Encoding: gzip, deflate, sdch\r\n";
$out .= "Accept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n";
$out .= "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36\r\n";
$out .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
$tmp = explode(' ', fgets($fp, 13));
echo $tmp[1];
fclose($fp);
}
返回http 400 - 这是不正确的。
另一个例子:www.raffiniert.biz/kunden返回301.这应该是403.
任何想法我做错了什么?
由于 圣拉斐尔
答案 0 :(得分:2)
这一行
$out .= "Host: www.raffiniert.biz/aktuell\r\n";
是问题。
在HTTP GET中,Host
标头就是那个,主机(域名)和主机内的路径在GET
行中提供。你应该这样写:
$out = "GET /aktuell HTTP/1.1\r\n";
$out .= "Host: www.raffiniert.biz\r\n";
关于更新的信息:
另一个例子:www.raffiniert.biz/kunden返回301.这应该是403.
www.raffiniert.biz/kunden
给出301,重定向到www.raffiniert.biz/kunden/
(带斜杠),给出403.浏览器将自动进行重定向(即它将发送两个连续的请求),并且隐藏301。
如果您要求"GET /kunden/ HTTP/1.1\r\n"
,您将直接获得403。
答案 1 :(得分:0)
下面会给你200的回报
我更新了要求获得/ aktuell的第4行和第5行
<?php
$fp = fsockopen("www.raffiniert.biz", 80, $errno, $errstr, 30);
if ($fp) {
$out = "GET /aktuell HTTP/1.1\r\n";
$out .= "Host: www.raffiniert.biz\r\n";
$out .= "Accept-Encoding: gzip, deflate, sdch\r\n";
$out .= "Accept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n";
$out .= "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36\r\n";
$out .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
$tmp = explode(' ', fgets($fp, 13));
echo $tmp[1];
fclose($fp);
}
?>