gpt4 book ai didi

Python OOP - 网络 session

转载 作者:行者123 更新时间:2023-12-04 16:21:43 33 4
gpt4 key购买 nike

我有以下脚本:

import mechanize, cookielib, re ...
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.addheaders = ....
and do stuff

因为我的脚本变得非常大,所以我想把它分成类(class)。一类用于处理网络连接,一类用于做事等等。
根据我的阅读,我需要类似的东西:
from web_session import * # this my class handling web-connection (cookies + auth)
from do_stuff import * # i do stuff on web pages

在我的主要工作中,我有:
browser = Web_session()
stuff = Do_stuff()

我的问题是当我将它传递给 Do_stuff 时我会丢失 session cookie。任何人都可以帮助我提供类和交互的基本示例,让我们说:我登录网站,浏览页面,我想做一些类似 re.findall("something", one_that_page) 的事情。提前致谢

更新:
主要脚本:
br = WebBrowser()
br.login(myId, myPass)

网页浏览器类:
class WebBrowser():

def __init__(self):
self.browser = mechanize.Browser()
cj = cookielib.LWPCookieJar()
self.browser.set_cookiejar(cj)
self.browser.addheaders = ....

def login(self, username, password):
self.username = username
self.password = password
self.browser.open(some site)
self.browser.submit(username, password)

def open(self, url):
self.url = url
self.browser.open(url)

def read(self, url):
self.url = url
page = self.browser.open(url).read()
return page

当前状态:
这部分工作正常,我可以登录,但我失去了 Mechanize 类的“好东西”,比如打开、发布或阅读 url。
例如:
management = br.read("some_url.php")

我所有的 cookie 都不见了(错误:必须登录)

我该如何解决?

最佳答案

“mechanise.Browser”类具有它所看到的所有你想放在“Web_session”类上的功能(旁注 - 命名约定和可读性会推荐“WebSession”)。

无论如何,如果您在调用之间保持相同的 Browser 对象,您将保留您的 cookie - 如果您真的想要拥有另一个包装类,只需创建一个 mehcanize.Broser在实例化您的 Web_session 类时,并将其保留为对象属性(例如,作为“self.browser”)。

但是,您很可能不需要这样做 - 只需在 __init__ 上创建一个浏览器即可。你的 Do_stuff ,把它作为一个实例属性,并在所有请求中重用它 -

class DoStuff(object):
def __init__(self):
self.browser = mechanize.Browser()
cj = cookielib.LWPCookieJar()
self.browser.set_cookiejar(cj)

def login(self, credentials):
self.browser.post(data=credentials)

def match_text_at_page(self, url, text):
# this will use the same cookies as are used in the login
req = self.browser.get(url)
return re.findall(text, req.text)

关于Python OOP - 网络 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29303555/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com