よう推奨していまPythonのurllib(2)から以下のリダイレクト

StackOverflow https://stackoverflow.com/questions/554446

  •  23-08-2019
  •  | 
  •  

質問

私は現在のようにログインサイトを利用Pythonしかし、サイトが送るクッキーとリダイレクトを書と同じページです。Pythonのようだがその後のリダイレクトの抑からの読み込みクッキーの送信によるログインページです。よう推奨していまPythonのurllib(urllib2)urlopenからのリダイレクト?

役に立ちましたか?

解決

なにができるカップルのもの

  1. 作HTTPRedirectHandlerを遮断する各リダイレクト
  2. のインスタンスを生成しHTTPCookieProcessorとインストールがオープナーでアクセスできるこのcookiejar.

この場合は少ない検査成績書を添付して納入してい

import urllib2

#redirect_handler = urllib2.HTTPRedirectHandler()

class MyHTTPRedirectHandler(urllib2.HTTPRedirectHandler):
    def http_error_302(self, req, fp, code, msg, headers):
        print "Cookie Manip Right Here"
        return urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers)

    http_error_301 = http_error_303 = http_error_307 = http_error_302

cookieprocessor = urllib2.HTTPCookieProcessor()

opener = urllib2.build_opener(MyHTTPRedirectHandler, cookieprocessor)
urllib2.install_opener(opener)

response =urllib2.urlopen("WHEREEVER")
print response.read()

print cookieprocessor.cookiejar

他のヒント

が必要なのは止まるリダイレクト、それは単純であるについて教えてください。例えば、私だけのためにクッキーのためのより良い性能ならないようにしたいク、その他のページです。また、そのコードとして保管さ3xx.プログラムを利用しましょう302を備えています。

class MyHTTPErrorProcessor(urllib2.HTTPErrorProcessor):

    def http_response(self, request, response):
        code, msg, hdrs = response.code, response.msg, response.info()

        # only add this line to stop 302 redirection.
        if code == 302: return response

        if not (200 <= code < 300):
            response = self.parent.error(
                'http', request, response, code, msg, hdrs)
        return response

    https_response = http_response

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), MyHTTPErrorProcessor)

このように、必要な時に必要なだけをurllib2.HTTPRedirectHandler.http_error_302()

そしてさらに共通の場合はお知らせいただければ停止のリダイレクトとして必須):

class NoRedirection(urllib2.HTTPErrorProcessor):

    def http_response(self, request, response):
        return response

    https_response = http_response

および通常の使用このようになっております:

cj = cookielib.CookieJar()
opener = urllib2.build_opener(NoRedirection, urllib2.HTTPCookieProcessor(cj))
data = {}
response = opener.open('http://www.example.com', urllib.urlencode(data))
if response.code == 302:
    redirection_target = response.headers['Location']

urllib2.urlopenは、ハンドラクラスのこのリストを使用していますbuild_opener()を呼び出します:

handlers = [ProxyHandler, UnknownHandler, HTTPHandler,
HTTPDefaultErrorHandler, HTTPRedirectHandler,
FTPHandler, FileHandler, HTTPErrorProcessor]

あなたは、その後、urllib2.build_opener(handlers)を省略し、リストを自分でHTTPRedirectHandler呼び出してみてください、あなたのURLを開くことが結果にopen()メソッドを呼び出すことができます。あなたが本当にリダイレクトを嫌う場合は、あなたもあなた自身の非リダイレクトオープナーにurllib2.install_opener(opener)を呼び出すことができます。

あなたの本当の問題はurllib2がクッキーにあなたが好きな方法をやっていないことであるように、

これが鳴ります。 も参照してください。 Webページにログインし、後で使用するためにクッキーを取得するためのPythonを使用する方法?

この質問は、<のhref = "https://stackoverflow.com/questions/110498/is-there-an-easy-way-to-request-a-url-in-python-and-not前に頼まれました-follow-リダイレクト/ 110808" >ここを。

編集を使用すると、風変わりなWebアプリケーションに対処する必要がある場合、あなたはおそらく試してみる必要があります<のhref = "http://wwwsearch.sourceforge.net/mechanize/" のrel = "nofollowをnoreferrer" > の機械化。これは、Webブラウザをシミュレートした偉大なライブラリです。あなたがリダイレクト、クッキーを制御することができ、ページが更新されます...ウェブサイトはJavaScriptを[重く]依存していない場合、あなたはMechanizeのと非常にうまく一緒に取得します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top