天天看點

FastAPI架構對包含特殊字元的URL的轉碼處理

背景:自動化測試中遇到一個不太規範的URL:[https://live.polyv.net/#/channel/2357792/monitoring-v3]

這個URL本身功能是沒問題的,相信你也看出來它中間包含’#‘号,呵~ 問題就出在’#'号上, 因為:

  • FastAPI的URL解析器會将其截斷,最終的URL被截斷成了"https://live.polyv.net/"

解決方法:

編寫URL字元過濾器,檢測到有特殊字元,則将其

%加上該字元的ASCII十六進制編碼

def do_you_need_transcoding(target_single_str):
    special_character_list = ['+', ' ', '/', '?', '%', '#', '&', '=']
    if target_single_str in special_character_list:
        # ord轉ASCII, hex轉16進制
        return ''.join(('%', hex(ord(target_single_str))[2:]))
    else:
        # 無需處理, 傳回原字元
        return target_single_str

 
if __name__ == '__main__':
    print(do_you_need_transcoding('&'))
    print(do_you_need_transcoding(' '))