2011-01-03 25 views
22

मैं निम्नलिखित वेबसाइट खोलने और प्रारंभिक कुकी को पुनर्प्राप्त करने और दूसरे यूआरएल-ओपन के लिए इसका उपयोग करने की कोशिश कर रहा हूं लेकिन यदि आप निम्न कोड चलाते हैं तो यह 2 अलग-अलग कुकीज़ आउटपुट करता है। मैं दूसरे यूआरएल-ओपन के लिए प्रारंभिक कुकी का उपयोग कैसे करूं?पायथन - urllib2 और cookielib

<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' को लटका दिया था। उस कोड को काम करना चाहिए (कम से कम मैक पर पायथन 2.6 पर मेरे लिए काम करता है) – albertov

+0

मेरे द्वारा पोस्ट किया गया कोड मजबूत नहीं है। कभी-कभी सत्र टिक जाएगा, दूसरी बार यह नहीं होगा। मेरा अनुमान है कि गैर-मानव पहुंच को हतोत्साहित करने के लिए कुछ सर्वर-साइड लागू किया गया है (यानी: बल्कि सख्त सत्र अमान्यता नीतियां) – albertov

0

मुझे लगता है कि, यह सर्वर यह प्रत्येक अनुरोध के लिए एक नई कुकी की स्थापना कर रहा है के साथ एक समस्या है:

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 अलग कुकीज़ हर बार के रूप में आप देख सकते हैं दर्शाता है।

+1

यह तब नहीं होता जब आप किसी वास्तविक ब्राउज़र से ब्राउज़ करते हैं ... यह अजीब बात है। – Adrian

7

कोई वास्तविक उत्तर नहीं है (लेकिन एक टिप्पणी के लिए बहुत लंबा है); संभवतः किसी और को इसका उत्तर देने का प्रयास करने के लिए उपयोगी।

मेरे सर्वोत्तम प्रयासों के बावजूद, मैं इसे समझ नहीं सकता।

फ़ायरबग में देख रहे हैं, कुकी फ़ायरफ़ॉक्स के लिए वही रहती है (ठीक से काम करती है)।

मैंने urllib2.HTTPSHandler(debuglevel=1) को जोड़ा है जो पाइथन भेज रहे हैं, और यह कुकी को फिर से भेजने के लिए प्रतीत होता है।

मुझे यह भी (ऐसा नहीं है) कि अगर मदद मिलेगी देखने के लिए सभी 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

पृष्ठ पर कुछ बुरा जावास्क्रिप्ट हो सकता है। – jfs

संबंधित मुद्दे