如何";“保持活力”;在python中使用cookielib和httplib?

如何";“保持活力”;在python中使用cookielib和httplib?,python,cookies,urllib2,httplib,Python,Cookies,Urllib2,Httplib,在python中,我使用httplib是因为它“保持”了http连接(与urllib(2)相反)。现在,我想将cookielib与httplib一起使用,但它们似乎彼此都很讨厌!!(无法将它们连接在一起) 有人知道解决这个问题的方法吗? < P> < P> < P>你应该考虑使用库,而在最早的机会你必须重构你的代码。同时, 黑客警报!:) 我会选择其他建议的方式,但我做了一个hack(出于不同的原因),它确实在和之间创建了一个接口 我所做的是用最少的方法集创建一个假的HTTPRequest,

在python中,我使用httplib是因为它“保持”了http连接(与urllib(2)相反)。现在,我想将cookielib与httplib一起使用,但它们似乎彼此都很讨厌!!(无法将它们连接在一起)


有人知道解决这个问题的方法吗?

< P>

< P>

< P>你应该考虑使用库,而在最早的机会你必须重构你的代码。同时,

黑客警报!:)

我会选择其他建议的方式,但我做了一个hack(出于不同的原因),它确实在和之间创建了一个接口

我所做的是用最少的方法集创建一个假的
HTTPRequest
,以便识别它并根据需要处理cookie。我使用了假请求对象,设置了cookielib所需的所有数据

下面是该类的代码:

class HTTPRequest( object ):
"""
Data container for HTTP request (used for cookie processing).
"""

    def __init__( self, host, url, headers={}, secure=False ):
        self._host = host
        self._url = url
        self._secure = secure
        self._headers = {}
        for key, value in headers.items():
            self.add_header(key, value)

    def has_header( self, name ):
        return name in self._headers

    def add_header( self, key, val ):
        self._headers[key.capitalize()] = val

    def add_unredirected_header(self, key, val):
        self._headers[key.capitalize()] = val

    def is_unverifiable( self ):
        return True

    def get_type( self ):
        return 'https' if self._secure else 'http'

    def get_full_url( self ):
        port_str = ""
        port = str(self._host[1])
        if self._secure:
            if port != 443:
                port_str = ":"+port
        else:
            if port != 80:
                port_str = ":"+port
        return self.get_type() + '://' + self._host[0] + port_str + self._url

    def get_header( self, header_name, default=None ):
        return self._headers.get( header_name, default )

    def get_host( self ):
        return self._host[0]

    get_origin_req_host = get_host

    def get_headers( self ):
        return self._headers
请注意,这个类只支持HTTPS协议(我现在所需要的)

使用该类的代码是(请注意另一个使响应与cookielib兼容的黑客):


<>你应该考虑使用库而不是最早的机会,你必须重构你的代码。同时,

黑客警报!:)

我会选择其他建议的方式,但我做了一个hack(出于不同的原因),它确实在和之间创建了一个接口

我所做的是用最少的方法集创建一个假的
HTTPRequest
,以便识别它并根据需要处理cookie。我使用了假请求对象,设置了cookielib所需的所有数据

下面是该类的代码:

class HTTPRequest( object ):
"""
Data container for HTTP request (used for cookie processing).
"""

    def __init__( self, host, url, headers={}, secure=False ):
        self._host = host
        self._url = url
        self._secure = secure
        self._headers = {}
        for key, value in headers.items():
            self.add_header(key, value)

    def has_header( self, name ):
        return name in self._headers

    def add_header( self, key, val ):
        self._headers[key.capitalize()] = val

    def add_unredirected_header(self, key, val):
        self._headers[key.capitalize()] = val

    def is_unverifiable( self ):
        return True

    def get_type( self ):
        return 'https' if self._secure else 'http'

    def get_full_url( self ):
        port_str = ""
        port = str(self._host[1])
        if self._secure:
            if port != 443:
                port_str = ":"+port
        else:
            if port != 80:
                port_str = ":"+port
        return self.get_type() + '://' + self._host[0] + port_str + self._url

    def get_header( self, header_name, default=None ):
        return self._headers.get( header_name, default )

    def get_host( self ):
        return self._host[0]

    get_origin_req_host = get_host

    def get_headers( self ):
        return self._headers
请注意,这个类只支持HTTPS协议(我现在所需要的)

使用该类的代码是(请注意另一个使响应与cookielib兼容的黑客):


是否需要使用httplib?cookielib与urllib2配合使用非常好,您可以添加自己的keep alive标头。为了保持所有内容的一致性,您可能需要将所有引用更改为lower()的大写形式,并将\u标头和get\u标头键转换为lower,这也是使用httplib的必要条件吗?cookielib与urllib2配合使用非常好,您可以添加自己的keep alive标头。为了保持所有内容的一致性,您可能需要将所有引用更改为lower()的大写(),并将_标头和get_headers键转换为lower。这项黑客操作为我节省了几个小时的时间,我自己也或多或少地重新实现了相同的内容。谢谢,欢迎你,扎克!这是分享的主要原因。:)这个黑客帮我省了几个小时的时间,我自己也或多或少地重新实现了同样的东西。谢谢,欢迎你,扎克!这是分享的主要原因。:)