你如何编码 WIQL JSON?
How do You Encode WIQL JSON?
在 Postman 中,我可以毫无问题地向我们的 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 流量。我也在安装 Wireshark,但这需要一段时间。我还通过 request.post 方法尝试了解它是如何构建请求主体的。当它覆盖到字节数组时,它似乎正确处理了单引号。
弄明白了:request.post() 为 json 参数取一个字典对象而不是 json 字符串。
在 Postman 中,我可以毫无问题地向我们的 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 流量。我也在安装 Wireshark,但这需要一段时间。我还通过 request.post 方法尝试了解它是如何构建请求主体的。当它覆盖到字节数组时,它似乎正确处理了单引号。
弄明白了:request.post() 为 json 参数取一个字典对象而不是 json 字符串。