for cookie in cookie_obj: print('key', cookie.name) print('value', cookie.value) # -----------------------------------保存cookie----------------------------- filename = 'neihan.txt' # 设置cookie保存的文件 cookie_obj = LWPCookieJar(filename=filename) cookie_handler = HTTPCookieProcessor(cookie_obj) opener = build_opener(cookie_handler) response = opener.open('http://www.neishanshequ.com') # 保存cookie到指定的文件中去 # ignore 忽略 # ignore_expires=True 即便目标cookie已经存在于文件当中,仍然将其写入 # ignore_discard=True 即便目标cookie将要/已经过期,仍然将其写入 cookie_obj.save(ignore_expires=True, ignore_discard=True) # ----------------------------------使用本地cookie进行请求----------- cookie = LWPCookieJar() cookie.load('neihan.txt') request = Request('http://www.neihanshequ.com') cookie_handler = HTTPCookieProcessor(cookie) opener = build_opener(cookie_handler) response = opener.open(request) print(response.read()) # -----------------------------------模拟登陆美食街------------------- cookie = LWPCookieJar(filename='meishijie.txt') cookie_handler = HTTPCookieProcessor(cookie) opener = build_opener(cookie_handler) headers = {
class CookieTransport(TimeoutTransport): '''A subclass of xmlrpclib.Transport that supports cookies.''' cookiejar = None scheme = 'http' # Cribbed from xmlrpclib.Transport.send_user_agent def send_cookies(self, connection, cookie_request): if self.cookiejar is None: self.cookiejar = CookieJar() elif self.cookiejar: # Let the cookiejar figure out what cookies are appropriate self.cookiejar.add_cookie_header(cookie_request) # Pull the cookie headers out of the request object... cookielist = list() for h, v in cookie_request.header_items(): if h.startswith('Cookie'): cookielist.append([h, v]) # ...and put them over the connection for h, v in cookielist: connection.putheader(h, v) # This is the same request() method from xmlrpclib.Transport, # with a couple additions noted below def request(self, host, handler, request_body, verbose=0): h = self.make_connection(host) if verbose: h.set_debuglevel(1) request_url = "%s://%s/" % (self.scheme, host) cookie_request = urllib.request.Request(request_url) self.send_request(h, handler, request_body) self.send_host(h, host) self.send_cookies(h, cookie_request) # ADDED. creates cookiejar if None. self.send_user_agent(h) self.send_content(h, request_body) errcode, errmsg, headers = h.getreply() # ADDED: parse headers and get cookies here # fake a response object that we can fill with the headers above class CookieResponse: def __init__(self, headers): self.headers = headers def info(self): return self.headers cookie_response = CookieResponse(headers) # Okay, extract the cookies from the headers self.cookiejar.extract_cookies(cookie_response, cookie_request) # And write back any changes if hasattr(self.cookiejar, 'save'): self.cookiejar.save(self.cookiejar.filename) if errcode != 200: raise xmlrpc.client.ProtocolError( host + handler, errcode, errmsg, headers ) self.verbose = verbose try: sock = h._conn.sock except AttributeError: sock = None return self._parse_response(h.getfile(), sock)
class CookieTransport(TimeoutTransport): '''A subclass of xmlrpclib.Transport that supports cookies.''' cookiejar = None scheme = 'http' # Cribbed from xmlrpclib.Transport.send_user_agent def send_cookies(self, connection, cookie_request): if self.cookiejar is None: self.cookiejar = CookieJar() elif self.cookiejar: # Let the cookiejar figure out what cookies are appropriate self.cookiejar.add_cookie_header(cookie_request) # Pull the cookie headers out of the request object... cookielist = list() for h, v in cookie_request.header_items(): if h.startswith('Cookie'): cookielist.append([h, v]) # ...and put them over the connection for h, v in cookielist: connection.putheader(h, v) def single_request(self, host, handler, request_body, verbose=1): # issue XML-RPC request h = self.make_connection(host) if verbose: h.set_debuglevel(1) request_url = "%s://%s/" % (self.scheme, host) cookie_request = urllib.request.Request(request_url) try: self.send_request(h, handler, request_body) self.send_host(h, host) self.send_cookies( h, cookie_request) # ADDED. creates cookiejar if None. self.send_user_agent(h) self.send_content(h, request_body) response = h.getresponse(buffering=True) # ADDED: parse headers and get cookies here # fake a response object that we can fill with the headers above class CookieResponse: def __init__(self, headers): self.headers = headers def info(self): return self.headers cookie_response = CookieResponse(response.msg) # Okay, extract the cookies from the headers self.cookiejar.extract_cookies(cookie_response, cookie_request) # And write back any changes if hasattr(self.cookiejar, 'save'): self.cookiejar.save(self.cookiejar.filename) if response.status == 200: self.verbose = verbose return self.parse_response(response) except xmlrpc.client.Fault: raise except Exception: # All unexpected errors leave connection in # a strange state, so we clear it. self.close() raise # discard any response data and raise exception if (response.getheader("content-length", 0)): response.read() raise xmlrpc.client.ProtocolError( host + handler, response.status, response.reason, response.msg, )
opener.open(req) # 2.访问个人网页 url = 'https://i.meishi.cc/cook.php?id=13686422' rq = request.Request(url, headers=headers) resp = opener.open(rq) print(resp.read().decode('utf-8')) # cookie加载与保存 # 保存 如果在MozillaCookieJar中指定文件名,save就不用指定文件名了 cookiejar = MozillaCookieJar('cookie.txt') handler = request.HTTPCookieProcessor(cookiejar) opener = request.build_opener(handler) resp = opener.open('http://www.httpbin.org/cookies/set/course/abc') cookiejar.save(ignore_discard=True, ignore_expires=True) # ignore_discard=True 即使cookies即将被丢弃也要保存下来 # ignore_expires=True 如果cookies已经过期也将它保存并且文件已存在时将覆盖 # 加载 cookiejar = MozillaCookieJar('cookie.txt') cookiejar.load() handler = request.HTTPCookieProcessor(cookiejar) opener = request.build_opener(handler) resp = opener.open('http://www.httpbin.org/cookies/set/course/abc') for cookie in cookiejar: print(cookie)