2011-01-03 22 views
22

次のWebサイトを開き、最初のクッキーを取得し、2つの異なるクッキーを出力する次のコードを実行すると、2番目のURLオープン用に使用しようとしています。 2番目のurl-openにはどのように初期Cookieを使用しますか?Python - urllib2&cookielib

import cookielib, urllib2 

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

home = opener.open('https://www.idcourts.us/repository/start.do') 
print cj 

search = opener.open('https://www.idcourts.us/repository/partySearch.do') 
print cj 

出力は、あなたが見ることができるようにするたびに2枚の異なるクッキーを示しています

<cookielib.CookieJar[<Cookie JSESSIONID=0DEEE8331DE7D0DFDC22E860E065085F for www.idcourts.us/repository>]> 
<cookielib.CookieJar[<Cookie JSESSIONID=E01C2BE8323632A32DA467F8A9B22A51 for www.idcourts.us/repository>]> 

答えて

21

これはurllibでは問題ありません。そのサイトはいくつかのファンキーなものをしています。

import cookielib, urllib2 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
# default User-Agent ('Python-urllib/2.6') will *not* work 
opener.addheaders = [ 
    ('User-Agent', 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.11) Gecko/20101012 Firefox/3.6.11'), 
    ] 


stylesheets = [ 
    'https://www.idcourts.us/repository/css/id_style.css', 
    'https://www.idcourts.us/repository/css/id_print.css', 
] 

home = opener.open('https://www.idcourts.us/repository/start.do') 
print cj 
sessid = cj._cookies['www.idcourts.us']['/repository']['JSESSIONID'].value 
# Note the += 
opener.addheaders += [ 
    ('Referer', 'https://www.idcourts.us/repository/start.do'), 
    ] 
for st in stylesheets: 
    # da trick 
    opener.open(st+';jsessionid='+sessid) 
search = opener.open('https://www.idcourts.us/repository/partySearch.do') 
print cj 
# perhaps need to keep updating the referer... 
+0

これはもう動作していないようです。本当に奇妙です... – albertov

+0

これで動作しています:)私はipythonセッションで 'opener.addheaders'をぶら下げていました。そのコードは現状どおりに動作するはずです(少なくとも私はMacのPython 2.6で動作します) – albertov

+0

投稿したコードは堅牢ではありません。セッションがスティックされることもあれば、そうでない場合もあります。私の推測では、人間以外のアクセス(すなわち、厳密なセッション無効化ポリシー)を阻止するためにサーバ側に実装されたものがあるということです。 – albertov

0

は、私が思うに、それは要求ごとに新しいクッキーを設定されているサーバに問題があります。

+1

実際のブラウザからブラウズしてもそれはしません。それは奇妙なことですが、それはあなたのセッションIDを検証するためにいくつかのスタイルシートをリクエストする必要があります。 – Adrian

7

実際の回答ではありません(ただし、コメントは長すぎます)。おそらくこれに答えようとしている誰にとっても便利です。

私の最高の試みにもかかわらず、私はこれを理解できません。

Firebugを見ると、Firefoxのクッキーはそのまま(正常に動作している)ようです。

私はurllib2.HTTPSHandler(debuglevel=1)を追加して、Pythonが送信しているヘッダーをデバッグし、クッキーを再送信するように見えます。

また、私はそれが(それはしなかった)助けになるかどうかを確認するために、すべてのFirefoxのリクエストヘッダを追加しました:

opener.addheaders = [ 
    ('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13'), 
    .. 
] 

私のテストコード:

import cookielib, urllib2 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), urllib2.HTTPSHandler(debuglevel=1)) 
opener.addheaders = [ 
    ('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13'), 
    ('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'), 
    ('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'), 
    ('Keep-Alive', '115'), 
    ('Connection', 'keep-alive'), 
    ('Cache-Control', 'max-age=0'), 
    ('Referer', 'https://www.idcourts.us/repository/partySearch.do'), 
] 

home = opener.open('https://www.idcourts.us/repository/start.do') 
print cj 

search = opener.open('https://www.idcourts.us/repository/partySearch.do') 
print cj 

私が欠けているように私は感じます何か明白です。

+1

ページに不快なJavaScriptがある可能性があります。 – jfs

関連する問題