1

我知道如何获取 urllib2 请求的响应标头,以及如何访问已发送的标头并将其打印出来并发出请求,如对此问题的答复中所述。

但是,我需要在OpenerDirector添加默认标头(例如'Content-Type')之后拦截请求,但是在实际发送请求之前,因为我需要添加额外的授权标头(与API我正在使用)它是各种事物的哈希,包括请求中的所有标准标头。

另请注意,我正在使用我自己的 Request 子类,它使我能够发送除 GET/POST 请求之外的 PUT/HEAD/DELETE 请求,并且对于我遇到的这个新问题的任何解决方案都必须保留此功能。

TL;DR:需要访问 OpenerDirector 添加的所有默认标头,并在实际发送请求之前使用它们添加新标头。

4

3 回答 3

1

只是一些想法:

urllib2.py 中的实现:

def _open(self, req, data=None):
    result = self._call_chain(self.handle_open, 'default',
                              'default_open', req)
    if result:
        return result

    protocol = req.get_type()
    result = self._call_chain(self.handle_open, protocol, protocol +
                              '_open', req)
    if result:
        return result

    return self._call_chain(self.handle_open, 'unknown',
                            'unknown_open', req)

我建议您将用于调试的 urllib2.py 复制到您的目录,然后添加调试输出。您需要查看字典 self.handle_open ...

于 2011-08-02T13:51:03.920 回答
0

在我的例子中,我刚刚决定在请求进入 OpenerDirector 之前手动设置所有需要散列的标头,而不是尝试拦截并执行此操作。我只使用 Python 大约一个星期,所以我现在还没有信心和知识深度来着手更复杂的解决方案。

于 2011-08-03T09:56:52.587 回答
0

这是一个不同的解决方案:如果您计算生成的标头,这些标头已经存在并且您的哈希值将是正确的。生成哪些标头?我猜内容长度就是其中之一。

于 2011-08-03T06:35:41.307 回答