[英]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.