【问题标题】:Python: Need to attach extra header, after hidden defaults added by urllib2, before the request is sentPython:需要附加额外的标头,在 urllib2 添加隐藏默认值之后,在发送请求之前
【发布时间】:2011-10-18 06:40:30
【问题描述】:

我知道如何获取 urllib2 请求的响应标头,以及如何访问已发送的响应标头并将其打印出来并发出请求,详见对 this question 的响应。

但是,我需要拦截请求after默认的headers,比如'Content-Type'是OpenerDirector添加的,但是before,请求其实是已发送,因为我需要添加一个额外的授权标头(与我正在使用的 API 相关),它是各种事物的哈希,包括请求中的所有标准标头。

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

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

【问题讨论】:

    标签: python http header urllib2 httplib


    【解决方案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...

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2014-05-31
          • 1970-01-01
          • 2017-02-24
          • 2017-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-31
          相关资源
          最近更新 更多