我已使用此代码打开whatismyipaddress.com
$fp = fsockopen("whatismyipaddress.com", 80, $errno, $errstr, 5);
if ($fp) {
$url = "/";
fputs($fp, "GET $url HTTP/1.1\r\nHost: {whatismyipaddress.com}\r\nConnection: close\r\n\r\n");
$resp = '';
while(!feof($fp)) {
$resp .= fgets($fp, 1024);
}
echo "$resp";
}
我总能看到这个错误
HTTP / 1.1 301永久移动日期:星期二,2011年11月29日20:19:36 GMT服务器:Apache / 2.2.17(Unix)DAV / 2位置:http://whatismyipaddress.com/ MS-Author-Via:DAV内容-Length:0 Connection:close Content-Type:text / html
此外,我已使用此代码打开whatismyipaddress.com/proxy-check
$fp = fsockopen("whatismyipaddress.com", 80, $errno, $errstr, 5);
if ($fp) {
$url = "/proxy-check";
fputs($fp, "GET $url HTTP/1.1\r\nHost: {whatismyipaddress.com}\r\nConnection: close\r\n\r\n");
$resp = '';
while(!feof($fp)) {
$resp .= fgets($fp, 1024);
}
echo "$resp";
}
并出现此错误
HTTP / 1.1 404未找到日期:星期二,2011年11月29日20:32:07 GMT服务器:Apache / 2.2.17(Unix)DAV / 2内容长度:421连接:关闭内容类型:text / html ;字符集= ISO-8859-1 找不到
在此服务器上找不到请求的URL /代理检查。
此外,尝试使用ErrorDocument处理请求时遇到404 Not Found错误。 位于{whatismyipaddress.com}端口80的Apache / 2.2.17(Unix)DAV / 2服务器
我确定,代码没有任何问题。我已经测试了很多网站,我没有遇到任何问题
请有人解释这个问题吗?
谢谢。
答案 0 :(得分:2)
我会尝试在标头中使用其他用户代理。 我确信他们正在使用某种基于头部的保护来阻止机器人。
使用curl:
$ curl -I 'http://whatismyipaddress.com'
HTTP/1.1 403 Forbidden
Date: Tue, 29 Nov 2011 20:48:28 GMT
Server: Apache/2.2.17 (Unix) DAV/2
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=iso-8859-1
但是,一旦尝试强制用户代理,它就可以工作:
$ curl -I -A 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0.1) Gecko/20100101 Firefox/8.0.1' 'http://whatismyipaddress.com'
HTTP/1.1 200 OK
Date: Tue, 29 Nov 2011 20:49:24 GMT
Server: Apache/2.2.17 (Unix) DAV/2
Set-Cookie: pt=f737a9bb1a119dcec75073f11b05d213; expires=Wed, 30-Nov-2011 20:49:24 GMT
MS-Author-Via: DAV
Vary: Accept-Encoding
Content-Type: text/html
答案 1 :(得分:1)
基本上你的脚本运行正常。有一些错误。一个特定于HTTP,请参阅以下代码行:
fputs($fp, "GET $url HTTP/1.1\r\nHost: {whatismyipaddress.com}\r\nCon ...
^ ^
删除那些括号,HTTP协议中没有任何那些,您需要提供有效的主机名。解决方案:
fputs($fp, "GET $url HTTP/1.1\r\nHost: whatismyipaddress.com\r\nCon ...
然后远程站点会告诉您需要用户代理。将其添加为附加标题:
fputs($fp, "GET $url HTTP/1.1\r
Host: whatismyipaddress.com\r
Connection: close\r
User-Agent: Florian der Fensterputzer\r\n\r\n");
这样做。 Demo