22

次の Web サイトを開いて最初の Cookie を取得し、それを 2 番目の url-open に使用しようとしていますが、次のコードを実行すると 2 つの異なる Cookie が出力されます。2 番目の url-open で最初の Cookie を使用するにはどうすればよいですか?

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 つの異なる Cookie が表示されます。

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

3 に答える 3

21

これは urllib の問題ではありません。そのサイトはいくつかのファンキーなことをしています。セッション ID を検証するには、いくつかのスタイルシートをリクエストする必要があります。

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...
于 2011-01-04T00:48:27.200 に答える
7

実際の答えではありません(ただし、コメントするには長すぎます)。これに答えようとしている他の人に役立つ可能性があります。

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

Firebug を見ると、Firefox の Cookie は同じまま (正常に動作) のようです。

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

また、すべての 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

明らかな何かが欠けているように感じます。

于 2011-01-03T09:37:42.610 に答える
0

リクエストごとに新しいCookieを設定しているサーバーに問題があると思います。

于 2011-01-03T09:04:28.347 に答える