簡體   English   中英

Python 請求 - 發送 null 作為查詢參數值

[英]Python Requests - send null as query params value

我的 URL 可以將 null 作為查詢參數的值,如下所示:

https:/api.server.com/v1/users/?parent=null

當我嘗試使用請求在 Python 中發送請求時,我正在傳遞None

requests.get(
    BASE_URL + USER_URL,
    headers = get_headers(),
    timeout = 60,
    params = {
        'parent': None
    }
)

但是,如果它設置為None ,它似乎會跳過查詢參數parent 我怎么能強迫它?

您不能使用resquests package 傳遞null值,因為它是文檔中所述的默認行為:

請注意,任何值為 None 的字典鍵都不會添加到 URL 的查詢字符串中。

一些解決方案:

  1. 也許您可以假設沒有它在后端是null ,或者;
  2. 您可以傳遞一個空字符串,或者;
  3. 傳遞一個不存在的 ID,例如0 / -1 ,或者;
  4. 傳遞 boolean 參數,例如parent=falseno-parent=true
  5. 我不建議傳遞字符串'null' ,因為它可以根據您使用的后端框架進行不同的解釋。 但如果是這樣的話,你可以這樣做。

正如@lepsch 所提到的, requests庫不會將None值添加到您的查詢參數中。 但是,我覺得整個問題存在誤解。

URL https:/api.server.com/v1/users/?parent=null沒有將查詢參數設置為None 它實際上設置為'null' ,這實際上是一個字符串,其中包含數據“null”。 因此,如果您想這樣做,您只需將請求中的None更改為'null'

requests.get(
    BASE_URL + USER_URL,
    headers = get_headers(),
    timeout = 60,
    params = {
        'parent': 'null'
    }
)

# This will request
# https:/api.server.com/v1/users/?parent=null

但是,如果您想要一個真正的 null 值,那么您應該考慮放置一個空字符串值...:

...
params = {
    'parent': ''
}
...

# This will request
# https:/api.server.com/v1/users/?parent=

...或使用實際的 null 編碼字符,如本答案所述

requests.get(
    BASE_URL + USER_URL + "?parent=%00", # Must be added directly, as to not encode the null value
    headers = get_headers(),
    timeout = 60
)

# This will request
# https:/api.server.com/v1/users/?parent=%00

不會跳過任何參數,就好像沒有設置這樣的參數一樣。

導入請求

r = requests.get('http://localhost:9090/events', params = { 'param1': None, 'param2':'', 'param3':'param_val' })
打印(r.url)

結果:http://localhost:9090/events?param2=&param3=param_val

暫無
暫無

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

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