#python #json #python-requests
Вопрос:
Я хочу отправить запрос на ОТДЫХ в конечную точку.
import requests
param1 = "abc"
param2 = "def"
input_data = """{{"param1": {}, "param2": {}}}""".format(param1, param2)
headers = {'Content-Type': 'application/json'}
resp = requests.post(scoring_uri, input_data, headers=headers)
resp
Тем не менее, я получаю ответ об ошибке:
<Response [502]>
Бревна:
param1 = request['param1']nTypeError: string indices must be integers
Как я могу это исправить (либо на внутренней стороне, либо на стороне отправки запроса).
Комментарии:
1. По-видимому,
request
это строка, а не словарь2. @ForceBru: Хм, так как же я мог передать его в качестве словаря в конечную точку?
3. В принципе,
input_data
может быть обычный словарь —requests
справится со всем за вас.4. @Fluxy, ха-ха, вы ошиблись в параметрах запроса
5. @toptalent: какой из них?
Ответ №1:
Для отправки json
данных на сервер можно использовать json=
параметр:
import requests
param1 = "abc"
param2 = "def"
payload = {"param1": param1, "param2": param2}
resp = requests.post(scoring_uri, json=payload, headers=headers)
Комментарии:
1. Я попробовал то, что вы предложили, и все равно получил
param1 = request['param1']nTypeError: string indices must be integers
2. @Fluxy
payload
Переменная должна быть обычным словарем python.requests
отправит запрос Json на сервер.3. Нет, извини, получаю это:
parameters = json.loads(request)n File "/azureml-envs/azureml_xxxxx/lib/python3.6/json/__init__.py", line 354, in loadsn return _default_decoder.decode(s)n
4. @Fluxy Используйте
resp = requests.post(scoring_uri, json=payload, headers=headers).json()
для декодирования ответа Json (обратите внимание.json()
в конце)5. Я применил ваш код. Но я думаю, что проблема находится на внутренней стороне. Я добавил
request received: {"param2": "abc", "param2": "def"}
. А потом там написаноparam1 = request['param1']nTypeError: string indices must be integers
Ответ №2:
Используйте этот код и получите ссылку отсюда
input_data = {"param1": param1, "param2": param2}
resp = requests.post(scoring_uri, json=input_data, headers=headers)
Затем
param1 = request["param1"]
Комментарии:
1. Хотя в чем разница? Это то же самое, что и код OP
2. На стороне бэкенда это не работает, потому
request
что поступает в виде строки в бэкэнд. Я только что узнал об этом, работаяprint(type(request))
в бэкэнде. Поэтому я все еще получаю ту же ошибку. Должен ли я делатьjson.dumps(request)
это в бэкэнде?