POST 请求的正文参数问题
Issue with Body Argument for POST request
我正在尝试通过 Devops REST API 在我们的 Azure Devops 实例中创建一个新团队。这是通过 R 完成的,包 'httr' 用于 POST 请求,'jsonlite' 用于 toJSON 函数。
我一直在利用 Microsoft (https://docs.microsoft.com/en-us/rest/api/azure/devops/core/teams/create?view=azure-devops-rest-5.1) 上的文档来正确构建请求,但一直收到 400 错误(错误请求)。
我是该组的管理员,因此拥有创建团队的权限,并且 url 是正确的,因为我可以通过 GET 请求 return 数据。
对于 body 参数,我使用以下代码;
args <- list(name = "my new team")
body <- toJSON(args, auto_unbox = TRUE)
正在向控制台打印 'body' returns
{"name":"my new team"}
这看起来与 Microsoft 文档中的 JSON 请求正文一致。
POST 请求的代码如下;
create.task <- POST(paste0("https://dev.azure.com/",org.id,"/_apis/projects/",
project.id,"/teams?api-version=5.1"),
encode = "json",
authenticate(username, token, type = "basic"),
body = body,
verbose())
这将 return 显示以下错误消息,而不是在 Devops 中创建新团队。
"HTTP/1.1 400 Bad Request
<- Cache-Control: no-cache
<- Pragma: no-cache
<- Content-Length: 446
<- Content-Type: application/json; charset=utf-8
<- Expires: -1"
不幸的是,这不是可重现的,但我想看看我是否犯了一个明显的错误。
谢谢。
我觉得不一定是你的授权有问题。我在 Postman 中测试了这个 rest api 并使用 PAT 进行了身份验证。测试结果是可以成功创建team
感谢 Hugh Lin 建议通过 Postman。由此我获得了我的授权令牌并设法使我的请求生效。然后我在 cURL 中导出代码片段并使用 https://curl.trillworks.com/#r 将 curl 命令转换为 R httr。
与我早期方法的另一个区别是,我在查询中使用 add_headers 和 api-version 设置授权、主机和内容类型。
下面的代码是我用的;
require(httr)
headers = c(
`Authorization` = 'Basic XXXXXXXXXXXXXXXX=',
`Content-Type` = 'application/json',
`Host` = 'dev.azure.com'
)
params = list(
`api-version` = '5.1'
)
data <- toJSON(list(name = "My New Team"), auto_unbox = TRUE, pretty = TRUE)
res <- httr::POST(url = 'https://dev.azure.com/{organization}/_apis/projects/{projectId}/teams',
httr::add_headers(.headers=headers),
query = params,
body = data)
这成功创建了新团队。
> status_code(res)
[1] 201
我正在尝试通过 Devops REST API 在我们的 Azure Devops 实例中创建一个新团队。这是通过 R 完成的,包 'httr' 用于 POST 请求,'jsonlite' 用于 toJSON 函数。
我一直在利用 Microsoft (https://docs.microsoft.com/en-us/rest/api/azure/devops/core/teams/create?view=azure-devops-rest-5.1) 上的文档来正确构建请求,但一直收到 400 错误(错误请求)。
我是该组的管理员,因此拥有创建团队的权限,并且 url 是正确的,因为我可以通过 GET 请求 return 数据。
对于 body 参数,我使用以下代码;
args <- list(name = "my new team")
body <- toJSON(args, auto_unbox = TRUE)
正在向控制台打印 'body' returns
{"name":"my new team"}
这看起来与 Microsoft 文档中的 JSON 请求正文一致。
POST 请求的代码如下;
create.task <- POST(paste0("https://dev.azure.com/",org.id,"/_apis/projects/",
project.id,"/teams?api-version=5.1"),
encode = "json",
authenticate(username, token, type = "basic"),
body = body,
verbose())
这将 return 显示以下错误消息,而不是在 Devops 中创建新团队。
"HTTP/1.1 400 Bad Request
<- Cache-Control: no-cache
<- Pragma: no-cache
<- Content-Length: 446
<- Content-Type: application/json; charset=utf-8
<- Expires: -1"
不幸的是,这不是可重现的,但我想看看我是否犯了一个明显的错误。
谢谢。
我觉得不一定是你的授权有问题。我在 Postman 中测试了这个 rest api 并使用 PAT 进行了身份验证。测试结果是可以成功创建team
感谢 Hugh Lin 建议通过 Postman。由此我获得了我的授权令牌并设法使我的请求生效。然后我在 cURL 中导出代码片段并使用 https://curl.trillworks.com/#r 将 curl 命令转换为 R httr。
与我早期方法的另一个区别是,我在查询中使用 add_headers 和 api-version 设置授权、主机和内容类型。
下面的代码是我用的;
require(httr)
headers = c(
`Authorization` = 'Basic XXXXXXXXXXXXXXXX=',
`Content-Type` = 'application/json',
`Host` = 'dev.azure.com'
)
params = list(
`api-version` = '5.1'
)
data <- toJSON(list(name = "My New Team"), auto_unbox = TRUE, pretty = TRUE)
res <- httr::POST(url = 'https://dev.azure.com/{organization}/_apis/projects/{projectId}/teams',
httr::add_headers(.headers=headers),
query = params,
body = data)
这成功创建了新团队。
> status_code(res)
[1] 201