python + ajaxのPOST通信では、urllib.parse.unquote_plus()を使うべし

python + ajaxのPOST通信では、urllib.parse.unquote_plus()を使うべし:

 ajax+python通信で、エンコードしたパラメタをPOSTする時、リクエストに半角スペースが含まれていると、スペースはpython側で"+"に自動変換される。

 なので、python側では、"+"を半角スペースに置き換える必要があるので、unquoteではなくunquote_plusを使う。

main.js
//送信側 
 
//空白ありのパラメタ 
let param = encodeURI("space space"); 
 
//実際に送信されるパラメタ 
//space%20space  <- まだ、スペースは%20のまま 
 
main.py
#受け取り側 
 
param = "space+space"  #なぜか、%20 -> + に置き換わっている 
 
urllib.parse.unquote_plus(param)  #"+"をスペースに置き換える 
 
割とはまったので、報告まで。

追記

特殊記号もエンコードする場合は、下記を使用する。

main.js
//送信側 
 
//特殊記号(ここでは"+")を含むパラメタ 
let param1 = encodeURI("a + b");           //a%20+%20b 
let param2 = encodeURIComponent("a + b");  //a%20%2b%20b 
 
main.py
#受け取り側 
 
param1 = "a+++b"    #a   b <- "+"が半角スペースに置き換えられる 
param2 = "a+%2b+b"  #a + b 
 
urllib.parse.unquote_plus(param)  #"+"をスペースに置き換える 
 

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)