簡體   English   中英

如何防止來自百分比編碼 URL 的 python 請求包含分號?

[英]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 是有效的,就我能夠對其進行測試而言, 可以毫無問題地處理它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM