首页 > 解决方案 > cUrl 到 python 转换 Clarifai

问题描述

我试图访问 clarifai api,cURL 中的以下代码运行良好,

curl -X POST \
  -H "Authorization: Key yyyyyyy" \
  -H "Content-Type: application/json" \
  -d '
  {
    "inputs": [
      {
        "data": {
          "image": {
            "base64": "'"$(base64 /Users/user/Documents/clariFai/test1.jpg)"'"
          }
        }
      }
    ]
  }'\
  https://api.clarifai.com/v2/models/xxxxxxxxxx/outputs

我想与 python 一起使用的相同,

我试过的是

import requests

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

data = ' { "inputs": [ { "data": { "image": { "base64": "$(base64 /Users/user/Documents/clariFai/test1.jpg)" } } } ] }'

response = requests.post('https://api.clarifai.com/v2/models/xxxxxxxxxx/outputs', headers=headers, data=data)

print(response.content)

但我得到的回应是

b'{"status":{"code":11102,"description":"Invalid request","details":"Malformed or invalid request"}}'

请帮我用正确的语法写同样的东西。

标签: pythonpython-3.xcurlpython-requestsrequest

解决方案


您可以尝试使用此代码对图像进行 base64 编码并通过以下方式发送requests

import base64
import requests


headers = {
    "Authorization": "Key yyyyyyy",
    "Content-Type": "application/json",  # <-- maybe not necessary
}

encoded_file = base64.b64encode(open("/Users/user/Documents/clariFai/test1.jpg", "rb").read())
encoded_file = encoded_file.decode("utf-8") # <-- convert it to string


data = {
    "inputs": [
        {
            "data": {
                "image": {
                    "base64": encoded_file  # <-- put base64 encoded file here
                }
            }
        }
    ]
}

response = requests.post(
    "https://api.clarifai.com/v2/models/xxxxxxxxxx/outputs",
    headers=headers,
    json=data,  # <-- use json= parameter
)

print(response.content)

编辑:转换encoded_file为字符串。


推荐阅读