python - 如何通过 Python 将文件从 URL 传递到 API?

我正在尝试使用一个 API,你给它一个 CSV 文件并对其进行验证。对于此 API,您将其传递给一个文件。

我想要做的是:

import requests
import urllib3

api_url="https://validation.openbridge.io/dryrun"
file_url = 'http://winterolympicsmedals.com/medals.csv'


http = urllib3.PoolManager()
response = http.request('GET', file_url)
data = response.data.decode('utf-8')



headers = {
#     requests won't add a boundary if this header is set when you pass files=
     'Content-Type': 'multipart/form-data',
}

response = requests.post(api_url, headers=headers, files=data)

我收到一个我不太明白的错误:

'不能对非 2 元组的对象进行编码'

我对 python 还很陌生,我在其他语言方面大多经验丰富,但我认为问题在于我可能将文件中的数据传递给 API,而不是给它文件。

关于我做错了什么以及如何将该文件传递给 API 的任何建议?

回答1

对于将来在谷歌上偶然发现此内容的任何人。我想出了怎么做。

import requests
import urllib3

api_url="https://validation.openbridge.io/dryrun"
file_url="http://winterolympicsmedals.com/medals.csv"

remote_file = urllib3.PoolManager().request('GET', file_url)

response = requests.post(url=api_url,
                             json={'data': {'attributes': {'is_async': True }}}, 
                             files={ "file": remote_file}, 
                             allow_redirects=False)

if response.ok:
    print("Upload completed successfully!")
    print()
    print("Status Code: ")
    print(response.status_code)
    print()
    print(response.headers['Location'])
    print()
else:
    print("Something went wrong!")
    print()
    print("Status Code: ")
    print(response.status_code)
    print()
    print(response.text)
    print()

相似文章