资讯专栏INFORMATION COLUMN

SAE Python urllib2因请求头字典键名为Unicode类型引发的异常问题

Freelander / 670人阅读

摘要:上面这段代码,我在本地机器服务器其它的应用引擎上测试都是正常的,版本是和。因此,有很大的可能是环境的问题。这个问题已经在工单系统提交了,期待会有好结果吧在某些应用场景下,使用了某些第三方的库比如,有可能的键名是类型的,那就必须进行转换。

SAE Python urllib2引发异常问题的关键点:HTTP(S)请求包含headers,且headers的键名为unicode

下面是引发异常的代码:

pythonimport urllib2
headers = {u"Authorization": u"Bearer 83F40E96FB6882686F4DF1E17105D04E"}
req = urllib2.Request("https://github.com", headers=headers)
urllib2.urlopen(req).read()

代码执行时会得到类似如下的报错信息(错误是在请求发起前引发的):

textHTTPError: HTTP Error 400: Bad request

下面就上面的请求做假设分析:

若请求不包含headers,则请求正常;

若请求包含headers,且headers字典键名不为unicode类型,则请求正常;

若请求包含headers,且headers字典键名为unicode类型,则请求前必然会引发HTTP Error 400: Bad request错误。

上面这段代码,我在本地机器、VPS服务器、其它的应用引擎上测试都是正常的,Python版本是2.6和2.7。因此,有很大的可能是SAE Pyhton环境的问题。这个问题已经在SAE工单系统提交了,期待会有好结果吧~

在某些应用场景下,使用了某些第三方的库(比如Flask-OAuthlib),有可能headers的键名是unicode类型的,那就必须进行转换。下面是在stackoverflow上找到的一个转换函数:

pythondef convert_keys_to_string(dictionary):
    """Recursively converts dictionary keys to strings."""
    if not isinstance(dictionary, dict):
        return dictionary
    return dict((str(k), convert_keys_to_string(v)) 
        for k, v in dictionary.items())

参考资料:

http://stackoverflow.com/questions/1254454/fastest-way-to-convert-a-dicts-keys-values-from-unicode-to-str

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45347.html

相关文章

  • Python-爬虫工程师-面试总结

    摘要:内存池机制提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。为了加速的执行效率,引入了一个内存池机制,用于管理对小块内存的申请和释放。 注:答案一般在网上都能够找到。1.对if __name__ == main的理解陈述2.python是如何进行内存管理的?3.请写出一段Python代码实现删除一个list里面的重复元素4.Python里面如何拷贝一个对象?...

    antz 评论0 收藏0
  • Python标准库---17、内置异常

    摘要:关联值通常会作为参数被传递给异常类的构造器。所有内置异常的基类。此异常仅用于非限定名称。由内置函数和的方法所引发,用来表示该迭代器不能产生下一项。当一个或函数返回时,将引发一个新的实例,函数返回的值将被用作异常构造器的形参。 上一篇文章:Python标准库---16、内置类型:上下文管理器类型、其他、特殊属性下一篇文章:Python标准库---18、文本处理服务:string 常见的字...

    mylxsw 评论0 收藏0
  • python三方库之requests-快速上手

    摘要:基于发送请求发送请求发送请求其他请求接口与请求类型一致,如等。如果请求返回或状态码,调用会抛出此异常。请求超过配置的最大重定向数。 基于2.21.0 发送请求 发送GET请求: r = requests.get(https://api.github.com/events) 发送POST请求: r = requests.post(https://httpbin.org/post, dat...

    xioqua 评论0 收藏0
  • Python 从零开始爬虫(零)——爬虫思路&requests模块使用

    摘要:定制筛选器,对内容进行筛选重点。审查元素这是浏览器自带的工具,提供抓包和检查网页源码的功能,供使用者分析网页。超时设置,如果服务器在指定秒数内没有应答,抛出异常,用于避免无响应连接,整形或浮点数。返回连接状态,正常。 前言 python 3.6 !! 本爬虫系列是面对有Python语法基础的读者写的,如果你没学过python,emmmm.....也没关系,你或许能从每篇文章中学到一些...

    YanceyOfficial 评论0 收藏0
  • python-数据类型字典

    摘要:删除字典元素和字典删除键为的条目删除中所有的条目删除整个字典删除并返回键为的条目二字典相关函数工厂方法工厂函数被用来创建字典。与函数方法相似,如果字典中键存在,删除并返回,如果键不存在,且没有给出的值,引发异常。 Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。一、创建字典(一)字典的增删改查(1)字典的创建key:(不可变类型)数字、字...

    SmallBoyO 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<