我想将此Curl代码转换为Python请求。
from requests_oauthlib import OAuth1Session
import requests
from requests_oauthlib import OAuth1
import json
from oauthlib.oauth1 import SIGNATURE_TYPE_QUERY, SIGNATURE_TYPE_BODY
from requests_toolbelt import MultipartEncoder
url = 'https://KEY:SECRET@www.sendowl.com/api/v1/products' # Yes i did put Key and secret
headers = {"Accept": "application/json"}
payload = {'product[name]': 'test','product[product_type]': 'digital','product[price]': '23','product[attachment]': ('C:\Users\APPE\Desktop\SendOWL\\audi.jpg', open('C:\Users\APPE\Desktop\SendOWL\\audi.jpg', 'rb'),)}
result = requests.post(url,headers=headers, params=payload)
这就是我所拥有的,但我收到了500错误
\x
答案 0 :(得分:1)
在curl
中,-F
或--form
参数用于发布多部分表单数据(文件)。在requests
中,您可以使用files
参数发布文件。
在requests
中,params
参数用于查询字符串数据。如果要在POST请求的正文中发送数据,则应使用data
参数。
对于基本身份验证,您只需使用auth
参数即可。
所以,你的python代码看起来应该是这样的,
import requests
url = 'https://www.sendowl.com/api/v1/products.xml'
headers = {"Accept": "application/json"}
auth = ('KEY', 'SECRET')
data = {'product[name]':'test', 'product[product_type]':'digital', 'product[price]':'23'}
files = {'product[attachment]': open('C:\Users\APPE\Desktop\SendOWL\\audi.jpg', 'rb')}
r = requests.post(url, auth=auth, headers=headers, data=data, files=files)
print(r.text)