如何防止百分比编码URL中的python请求包含分号?

时间:2016-10-09 10:22:03

标签: python http python-requests

我想将一些数据发布到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也没用。

谢谢!

1 个答案:

答案 0 :(得分:0)

RFC 2616, section 3.2.2将HTTP URL的语法指定为:

http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]

它还说:

  

如果URL中没有abs_path,则必须在“/”时给出      用作资源的Request-URI

在此网址中:

http://www.google.com;id=aaa

没有/,因此没有abs_path且没有:,因此没有port。这意味着www.google.com;id=aaa是主机名。

主机名中不允许使用分号(有关主机名允许的内容,请参阅this answer),因此网址无效

如果id=aaa应该是路径的一部分,那么这将是一个有效的网址:

http://www.google.com/;id=aaa

如果id=aaa应成为查询的一部分,也是如此:

http://www.google.com/?;id=aaa

修改

该问题已被修改为询问有关http://www.google.com/;id=aaa的内容。

该网址有效,只要我能够对其进行测试,就可以毫无问题地处理它。