3

urllib2 が選択した URL へのリダイレクト リクエストを追跡するのをどのように防ぐことができるのか疑問に思っています。ブラウジング中に次のコード スニペットを見つけましたが、グローバルに動作するようで、特定の URL でリダイレクトを無効にしたいだけです。

import urllib2
class RedirectHandler(urllib2.HTTPRedirectHandler):
    def http_error_302(self, req, fp, code, msg, headers):
        result = urllib2.HTTPError(req.get_full_url(), code, msg, headers, fp)
        result.status = code
        return result
    http_error_301 = http_error_303 = http_error_307 = http_error_302

opener = urllib2.build_opener(RedirectHandler())
webpage = opener.open('http://www.website.com').geturl()
print webpage

また、urllib.urlopen('site.com') を使用して URL を要求していることにも言及する必要があります。たとえば、site.com が site.com/redirect にリダイレクトするとしますが、最初のリダイレクトを許可する必要があります。 site.com/redirect から site.com/secondredirect に再度リダイレクトします。スクリプトで URL 内の「secondredirect」を認識し、そのリクエストが発生しないようにしたいと考えています。私はこれをすべてうまく説明し、これを理解しようとして何時間も費やしてきたので、いくつかの返信を期待しています:headache:

4

2 に答える 2

6

urllib2 を使用して、リクエストごとにリダイレクト フォローを無効にする方法はありません。通常、urllib2などのモジュールで使用される低レベルのモジュールであるhttplibを使用するオプションがあります。

>>> import httplib
>>> conn = httplib.HTTPConnection("www.bogosoft.com")
>>> conn.request("GET", "")
>>> r1 = conn.getresponse()
>>> print r1.status, r1.reason
301 Moved Permanently
>>> print r1.getheader('Location')
http://www.bogosoft.com/new/location

もう 1 つのオプションは、Python Requestsライブラリを使用することです。これにより、リダイレクトの処理方法をよりきめ細かく制御できます。私の意見では、別のライブラリを使用するオプションがある場合は、リクエストを選択することをお勧めします。

于 2013-11-12T10:15:36.773 に答える