0

私はこのウェブサイトについて話している:

http://www.belegger.nl/mijnbelegger/voorpagina

次のようにログインしようとしています。

def login(self, username, password):
    #form_doc: a lxml.html object
    form_doc = self.browser.getdoc("http://www.belegger.nl/mijnbelegger/voorpagina")
    form_html = form_doc.cssselect("div.loginPanel form")[0]
    form_dict = {inp.get('name') : inp.get('value') for inp in form_html.cssselect("input")}
    form_dict['username'] = username
    form_dict['password'] = password

    #form_dict now contains all the correct inputs and their values

    #then, i precisely copy all the headers of a successful browser login:
    self.add_headers()        

    #what follows is a POST request:
    self.browser.open("http://www.belegger.nl/mijnbelegger/voorpagina", self.browser.urlencode(form_dict))

def add_headers(self):
    headers = {
        'Host' : 'www.belegger.nl',
        'User-Agent' : 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:18.0) Gecko/20100101 Firefox/18.0',
        'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language' : 'en-gb,en;q=0.5',
        'Accept-Encoding' : 'gzip, deflate',
        'Referer' : 'http://www.belegger.nl/mijnbelegger/profiel',
        'Content-Length' : '187',
        'Content-Type' : 'text/plain; charset=UTF-8',
        'Connection' : 'keep-alive',
        'Pragma' : 'no-cache',
        'Cache-Control' : 'no-cache'
    }
    for header in headers.items():
        self.browser.opener.addheaders.append(header)

そして、結果のリクエストは次のとおりです。

POST /mijnbelegger/voorpagina HTTP/1.1
Content-Length: 115
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:18.0) Gecko/20100101 Firefox/18.0
Host: www.belegger.nl
Referer: http://www.belegger.nl/mijnbelegger/profiel
Pragma: no-cache
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded

formtoken=c5851960db739b61bc28afd4f23cec2badacb807&username=xxx&password=xxx&Inloggen=Inloggen

Pythonでのリクエストは、Firefoxでのリクエストとほぼ同じですが、唯一の違いは「connection」ヘッダーです。これは、urllib2を介して変更できるようには見えません。

しかし、それだけではありません。

Firefoxアドオンの「ライブhttpヘッダー」を使用して正常なログインをやり直そうとすると、同じ501エラーが発生します。正しい'formtoken'値を使用すると、これも発生します。

それで、この501の原因は何でしょうか?

4

0 に答える 0