我正在尝试使用一个 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()