Что за хитрость на этом сайте? - PullRequest
2 голосов
/ 25 января 2011

Я могу получить доступ к этой веб-странице в моем браузере 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.

Может кто-нибудь дать мне подсказку?Я использую Python 2.5 в Windows XP.

Большое спасибо!

Ответы [ 2 ]

11 голосов
/ 25 января 2011

Возможно, сервер читает ваш заголовок 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()

и получил правильный результат.

ПРИМЕЧАНИЕ. Пожалуйста, ознакомьтесь с Условиями обслуживания сайта, если вы планируете использовать его программно. Это может нарушать их правила, если вы продолжаете отправлять такие запросы автоматически.

0 голосов
/ 25 января 2011

Возможно, он прочитал происхождение команды POST и обнаружил, что она не пришла с действительного хоста и отказывает вам.

...