SAE Python urllib2因请求头字典键名为Unicode类型引发的异常问题
2015-01-24 01:41
309 查看
SAE Python urllib2引发异常问题的关键点:HTTP(S)请求包含headers,且headers的键名为unicode
下面是引发异常的代码:
代码执行时会得到类似如下的报错信息(错误是在请求发起前引发的):
下面就上面的请求做假设分析:
若请求不包含headers,则请求正常;
若请求包含headers,且headers字典键名不为unicode类型,则请求正常;
若请求包含headers,且headers字典键名为unicode类型,则请求前必然会引发
上面这段代码,我在本地机器、VPS服务器、其它的应用引擎上测试都是正常的,Python版本是2.6和2.7。因此,有很大的可能是SAE Pyhton环境的问题。这个问题已经在SAE工单系统提交了,期待会有好结果吧~
在某些应用场景下,使用了某些第三方的库(比如Flask-OAuthlib),有可能headers的键名是unicode类型的,那就必须进行转换。下面是在stackoverflow上找到的一个转换函数:
参考资料:
http://stackoverflow.com/questions/1254454/fastest-way-to-convert-a-dicts-keys-values-from-unicode-to-str
下面是引发异常的代码:
python
import urllib2 headers = {u'Authorization': u'Bearer 83F40E96FB6882686F4DF1E17105D04E'} req = urllib2.Request('https://github.com', headers=headers) urllib2.urlopen(req).read()
代码执行时会得到类似如下的报错信息(错误是在请求发起前引发的):
text
HTTPError: 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上找到的一个转换函数:
python
def 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
相关文章推荐
- sahrepoint把dll文件放在站点bin目录下访问的问题,安全性异常 ,请求类型的权限已失败。
- python知识:json格式文本;异常处理;字符串处理;unicode类型和str类型转换
- C#+Emgucv:解决"Emgu.CV.CvInvoke”的类型初始值设定项引发异常"的问题
- 关于python2和3版本不同引发的urllib报错及引出的字符串问题
- python中常见问题--字典中怎么嵌套字典类型
- AS3 URLRequest相关,浏览器请求头MIME类型引发的问题
- Python 猜数字游戏,解决变量类型异常问题
- 解决Python 遍历字典时删除元素报异常的问题
- [ python ] 字典类型的一些注意问题
- 解决VS2012 WPF中“对类型“ ”的构造函数执行符合制定的绑定约束的调用时引发了异常。行号为“3”,行位置为“9””问题的过程
- 解决Python 遍历字典时删除元素报异常的问题
- python里面的字典dict类型键名为中文的解决办法
- python2.7字典转换成json时中文字符串变成unicode的问题:
- 解决VS2005提示类型初始值设定引发异常或配置系统未能初始化问题
- 单件模式出现“类型初始值设定项引发异常”问题原因
- C# WPF VS2012 对类型“ ”的构造函数执行符合指定的绑定约束的调用时引发了异常 问题解决办法 产生什么原因
- Oracle用 odp.net 时出现 Oracle.DataAccess.Client.OracleConnection的类型初始值设定项引发异常 问题的解决
- 爬虫Get请求参数匹配得到字典类型格式(Python)
- [ python ] 字典类型的一些注意问题
- python 输出JSON类型数据时遇到的编码问题(utf8,unicode)