【问题标题】:Converting cURL to Python Requests error将 cURL 转换为 Python 请求错误
【发布时间】:2017-12-25 15:49:06
【问题描述】:

我正在尝试将 cURL 转换为 Python 请求,但不起作用。

cURL: curl -kv -H 'Content-Type: application/json' 'https://IP-address/api/v1/login' -d '{"username":"api", "password":"APIPassword"}'

我的 Python 请求代码:

import requests

url = "https://IP-address/api/v1/login"

payload = "'{\"username\":\"api\", \"password\":\"APIPassword\"}'"
headers = {
    'Content-Type': "application/json",
    'cache-control': "no-cache",
    }

response = requests.request("GET", url, headers=headers, data=payload, verify=False)

print(response.text)

这不起作用并给我 400 bad requests 错误。

我尝试使用https://curl.trillworks.com/进行转换

这给了我下面的代码也不起作用。

import requests

url = 'https://IP-address/api/v1/login'

headers = {
    'Content-Type': 'application/json',
}

data = '{"username":"api", "password":"APIPassword"}'

output = requests.get(url, data=data, verify=False)

print (output)

谁能帮我找出这里的问题。

编辑:我编辑了第二个脚本以产生输出:给出 500 错误

【问题讨论】:

  • 您在 cURL 命令中指定的标志怎么样?为什么不将它们包含在您的 python 脚本中?
  • 400 错误请求可能源于您原来的 payload 是无效的 JSON。您的 curl 命令在 JSON 周围有单引号 ('),但这些只是 bash 会将整个事情解释为单个参数。
  • @AakashVerma -k--insecure,与verify=False 相同; -v--verbose-H--header-d--data
  • 你自己的python代码确实有错误。在您的第二个代码中,“也不起作用”是什么意思? 400 或 403 还是其他?
  • @mononoke 你是对的 - 第二个代码 sn-p 实际上并没有打印出响应

标签: python json python-3.x curl python-requests


【解决方案1】:

requests.post 中的json 参数用于json 数据。它还负责处理标题。

data = {"username":"api", "password":"APIPassword"}
response = requests.post(url, json=data, verify=False)

【讨论】:

  • 这似乎有效,我得到的响应为 200。但是我如何查看实际输出?当我运行 curl 时,我得到一个会话令牌作为输出,但是我如何获得 Python 请求?
  • 只需打印它,即:print(response.content) 或者如果它是 json 响应,请使用:print(response.json())
【解决方案2】:

另一种确保您在有效负载中发送有效 JSON 的方法是使用json python 库通过json.dumps() 格式化您的有效负载,它从对象返回一个表示 json 对象的字符串。当我需要在有效负载中发送嵌套的 json 对象时,这对我特别有用。

import json 
import requests

url = 'https://sample-url.com' 
headers = { 'Content-Type': 'application/json', 'Authorization': f'{auth_key}'}
payload =   {   "key": "value",
                "key": ["v1", "v2"],
                "key": {
                         "k": "v"
                        }
                ...
            }

r = requests.post(url, headers=headers, data=json.dumps(payload))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-30
    • 2020-03-18
    • 2023-04-02
    • 2017-06-25
    • 2019-05-19
    相关资源
    最近更新 更多