Как вы кодируете WIQL JSON? - PullRequest
       38

Как вы кодируете WIQL JSON?

0 голосов
/ 19 апреля 2020

В Почтальоне я могу отправить запрос на наш Azure DevOps 2019 Сервер без проблем:

POST https://<AZDOSERVER>/<COLLECTION>/<PROJECT>/<TEAM>/_apis/wit/wiql?api-version=5.0
{"query": "Select [System.Id] From WorkItems WHERE [System.AreaPath] UNDER '<AREANAME>'"}

Но когда я делаю это в Python, кажется, возникает проблема с кодировкой с одинарными кавычками вокруг моего AREANAME. Вот мой код:

url = "https://<AZDOSERVER>/<COLLECTION>/<PROJECT>/<TEAM>/_apis/wit/wiql?api-version=5.0"
json = '{"query": "Select [System.Id] From WorkItems WHERE [System.AreaPath] UNDER ' 
    + "'<AREANAME>'" + '" }'
headers = {'Accept': 'application/json; api-version=5.0'}
response = request.post(url, json=json, auth=self.basicauth, headers=headers)

Я получаю ошибку 400 со следующим сообщением:

b'{"count":1,"value":{"Message":"Error converting value \\"{\\"query\\": 
\\"Select [System.Id] From WorkItems WHERE [System.AreaPath] UNDER \'<AREANAME>\'\\" }\\" 
to type \'Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.Wiql\'. Path \'\', 
line 1, position 92.\\r\\n"}}'

Как правильно передать JSON в python request.post () способ, чтобы он отправлял с правильной кодировкой? Я попытался захватить свой исходящий запрос через Fiddler, но он не видит python traffi c. Я тоже устанавливаю Wireshark, но это займет некоторое время. Я также прошел через метод request.post, чтобы попытаться понять, как он строит тело запроса. Кажется, что он обрабатывает одинарные кавычки правильно, когда он охватывает байтовый массив.

1 Ответ

0 голосов
/ 20 апреля 2020

Разобрался: request.post () принимает объект словаря для параметра json вместо строки json.

...