[英]How to prevent python requests from percent encoding URLs contain semicolon?
我想将一些数据发布到像http://www.google.com/;id=aaa
这样的http://www.google.com/;id=aaa
我使用以下代码:
url = 'http://www.google.com/;id=aaa'
r = requests.post(url, headers=my_headers, data=my_data, timeout=10)
不幸的是,我发现requests
只是在没有任何警告的情况下将我的 uri 剪切到http://www.google.com/
......
有没有办法以原始形式传递参数 - 没有百分比编码?
我尝试config={'encode_uri': False}
但它被放弃了,并且urllib.unquote
也没有用。
谢谢!
RFC 2616 第 3.2.2 节将 HTTP URL 的语法指定为:
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
它还说:
如果 abs_path 不存在于 URL 中,则在用作资源的请求 URI 时必须将其指定为“/”
在这个网址中:
http://www.google.com;id=aaa
没有/
,所以没有abs_path
也没有:
,所以没有port
。 这意味着www.google.com;id=aaa
是主机名。
主机名中不允许使用分号(有关主机名中允许的内容,请参阅此答案),因此此URL 无效。
如果id=aaa
应该是路径的一部分,这将是一个有效的 URL:
http://www.google.com/;id=aaa
这也是,如果id=aaa
应该是查询的一部分:
http://www.google.com/?;id=aaa
该问题已修改为询问http://www.google.com/;id=aaa
。
该 URL 是有效的,就我能够对其进行测试而言, python-requests可以毫无问题地处理它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.