Python URL-кодирование Specifi c Результаты - PullRequest
0 голосов
/ 01 апреля 2020

Я запрашиваю из базы данных в Python 3.8.2

Мне нужно, чтобы urlencoded-результаты были:

data = {"where":{"date":"03/30/20"}}
needed_results = ?where=%7B%22date%22%3A%20%2203%2F30%2F20%22%7D

Я пробовал следующее

import urllib.parse

data = {"where":{"date":"03/30/20"}}

print(urllib.parse.quote_plus(data))

Когда я это делаю, я получаю следующее

Traceback (most recent call last):
  File "C:\Users\Johnathan\Desktop\Python Snippets\test_func.py", line 17, in <module>
    print(urllib.parse.quote_plus(data))
  File "C:\Users\Johnathan\AppData\Local\Programs\Python\Python38-32\lib\urllib\parse.py", line 855, in quote_plus
    string = quote(string, safe + space, encoding, errors)
  File "C:\Users\Johnathan\AppData\Local\Programs\Python\Python38-32\lib\urllib\parse.py", line 839, in quote
    return quote_from_bytes(string, safe)
  File "C:\Users\Johnathan\AppData\Local\Programs\Python\Python38-32\lib\urllib\parse.py", line 864, in quote_from_bytes
    raise TypeError("quote_from_bytes() expected bytes")
TypeError: quote_from_bytes() expected bytes

Я попробовал несколько других методов и получил:? Где =% 7B% 27date% 27% 3A +% 2703% 2F30% 2F20% 27% 7D

Long Story Short, мне нужно url кодировать следующее


data = {"where":{"date":"03/30/20"}}

needed_encoded_data = ?where=%7B%22date%22%3A%20%2203%2F30%2F20%22%7D

Спасибо

1 Ответ

1 голос
/ 01 апреля 2020

where - это словарь, который не может быть закодирован в URL. Вы должны сначала превратить это в объект строки или байтов.

Вы можете сделать это с помощью json.dumps

import json
import urllib.parse

data = {"where":{"date":"03/30/20"}}

print(urllib.parse.quote_plus(json.dumps(data)))

Выход:

%7B%22where%22%3A+%7B%22date%22%3A+%2203%2F30%2F20%22%7D%7D
...