gpt4 book ai didi

python - HTTP 请求在 cURL 中工作但在 urllib2.request 中不工作?

转载 作者:太空宇宙 更新时间:2023-11-04 05:39:35 25 4
gpt4 key购买 nike

我有这个按预期运行的 cURL 命令:

curl -v -X POST -H "Api-Key:75b5cc58a5cdc0a583f91301cefedf0c" -H "Content-Type:application/x-www-form-urlencoded" "http://localhost:8080/app?client_id=ef5f7a03-58e8-48d7-a38a-abbd2696bdb6&grant_type=refresh_token&username=user1&password=password&refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"

此命令返回一个 JSON。

我尝试使用 urllib2 模拟此调用。

request_url = "http://localhost:8080/app"
values = {
"client_id": "ef5f7a03-58e8-48d7-a38a-abbd2696bdb6",
"grant_type": "refresh_token",
"username": "user1",
"password": "password"
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
}

data = urlencode(values)
req = urllib2.Request(request_url, data)
req.add_header("Api-Key", "75b5cc58a5cdc0a583f91301cefedf0c")
req.add_header("Content-Type", "application/x-www-form-urlencoded")

print request_url
print req.get_data()
print req.get_method()
print req.get_full_url()

这是我得到的输出:

http://localhost:8080/app
username=user1&password=password&grant_type=refresh_token&refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9&client_id=ef5f7a03-58e8-48d7-a38a-abbd2696bdb6
POST
http://localhost:8080/app

上面的 urllib2.request 返回错误代码 401,这意味着我发送的 refresh_token 不正确。

这里可能出了什么问题?

最佳答案

cURL 命令将值作为查询参数作为 URL 的一部分传递。 urllib2 命令将值作为 POST 数据传递。你应该使用:

request_url = "http://localhost:8080/app"
values = {
"client_id": "ef5f7a03-58e8-48d7-a38a-abbd2696bdb6",
"grant_type": "refresh_token",
"username": "user1",
"password": "password"
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
}
request_url = request_url + "?" + urlencode(values)
data = ""
req = urllib2.Request(request_url, data)
req.add_header("Api-Key", "75b5cc58a5cdc0a583f91301cefedf0c")
req.add_header("Content-Type", "application/x-www-form-urlencoded")

两点说明:

  1. 这使用带有空数据的 POST 方法来模仿 cURL 命令也是一样的。
  2. 标准 OAuth 2.0 使用 POST 请求 token 端点(这似乎是这个请求的内容),所以你的Python 代码是正确的

关于python - HTTP 请求在 cURL 中工作但在 urllib2.request 中不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34449073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com