我可以在我的firefox浏览器中访问此网页: http://www.ip-adress.com/ip_tracer/74.82.190.99 所以我可以获得有关此IP的信息。
但是,当我使用Python获取它时,会出现错误:
import urllib
f = urllib.urlopen("http://www.ip-adress.com/ip_tracer/74.82.190.99")
print f.read()
我收到此错误:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /ip_tracer/74.82.190.99
on this server.</p>
</body></html>
我看一下页面的源代码:
<form action="/ip_tracer/" method="post">
<div>
<input id="ipqry" name="QRY" type="text" value="74.82.190.99" size="18" maxlength="255" onclick="cleanup(this)">
<input type="submit" value="Track IP, host or website" onclick="progress(true)">
</div>
</form>
我使用POST
方法,结果是一样的:
import urllib
params = urllib.urlencode({'QRY': '74.82.190.99'})
f = urllib.urlopen("http://www.ip-adress.com/ip_tracer/", params)
print f.read()
结果与403 Forbidden
相同。
任何人都可以给我一个提示吗?我在Windows XP上使用Python 2.5。
非常感谢!
答案 0 :(得分:11)
服务器可能会读取您的User-Agent
标头,并决定不提供您的请求。或者,它可以依赖于通常由普通浏览器设置的其他标头(如FF)。
我试过这个:
import urllib2
request = urllib2.Request("http://www.ip-adress.com/ip_tracer/74.82.190.99")
request.add_header("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5")
f = urllib2.urlopen(request)
print f.read()
并得到了正确的结果。
注意:如果您打算以编程方式使用,请检查网站的服务条款。如果您继续自动发送此类请求,则可能违反其规则。
答案 1 :(得分:0)
它可能会读取POST
命令的来源,并发现它不是来自有效的主机并拒绝您。