2011-01-03 10 views
22

Aşağıdaki web sitesini açmaya ve ilk tanımlama bilgisini almaya çalışıyorum ve ikinci URL'yi kullanıyorum, ancak aşağıdaki kodu çalıştırırsanız 2 farklı çerez çıkarır. İkinci URL için ilk çerezi nasıl kullanabilirim?Python - urllib2 & cookielib

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

cevap

21

Bu, urllib ile ilgili bir sorun değil. Bu site biraz korkak şeyler yapıyor. Oturum kimliğinizi doğrulamak için birkaç stil sayfası istemeniz gerekir:

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

Bu artık çalışmıyor gibi görünüyor. Gerçekten garip ... – albertov

+0

Şuanda çalışıyor :) Ipeton oturumumda 'opener.addheaders' sarkan bıraktım. Bu kod, (en azından bir python 2.6'da benim için çalışır) – albertov

+0

Gönderdiğim kod sağlam değil. Bazen seans, diğer zamanlarda olmaz. Tahminimce, insan olmayan erişimi engellemek için sunucu tarafında uygulanan bir şey var (yani: oldukça katı oturum geçersiz kılma ilkeleri) – albertov

0

Bence, bunun her istek için yeni bir çerez ayarlama sunucu ile ilgili bir sorun olduğunu:

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 

Çıktı 2 farklı çerezler gördüğünüz gibi her zaman gösterir.

+1

Gerçek bir tarayıcıya göz atarken bunu yapmazsınız ... bu garip şeydir. – Adrian

7

Gerçek bir cevap değil (ama bir yorum için çok uzun); Buna cevap vermeye çalışan herkes için yararlı olabilir.

En iyi denemelerime rağmen, bunu anlayamıyorum.

Firebug'da bakıldığında, çerez Firefox için aynı kalıyor (düzgün çalışıyor).

Python'un hangi üstbilgileri gönderdiği hata ayıklamak için urllib2.HTTPSHandler(debuglevel=1) ekledim ve tanımlama bilgilerini yeniden gönderdiği görülüyor.

Ayrıca o yardım edersen (etmedi) görmek için tüm Firefox istek başlıklarını ekledi:

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'), 
    .. 
] 

Testim kodu: eksik gibi hissediyorum

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 

açık bir şey.

+1

sayfada bazı kötü javascript olabilir. – jfs