我对python(和一般的编码)非常陌生,所以我希望我能很好地阐明我的问题。我设法将一个连接到我公司软件之一的API的应用程序拼凑在一起。
我已经能够进行身份验证,获取令牌,将其传递给其他函数以进行GET和POST传递给某些API函数。我正在处理一个发布文件的新API调用。我被困了。我发现的所有示例仅显示传递文件,但我需要传递文件,数据和auth标头。我已经尝试了很多代码变体,但是没有什么比这更接近我了。
首先,此功能有效,但具有用于发布新群组的不同API(群组)。它不包含任何文件。
def apiPost(token):
if not token == "":
status.run_set_text('Running API POST Call', 3)
headers = { 'Content-Type':'application/json', 'Authorization':'Bearer '+str(token) }
data = {"data":{ 'id':0, 'customerId':33, 'name':'567tuhj', 'description':'sdfgsdfg'}}
r = requests.post(api_url+"v1.1/groups/", headers=headers, data=json.dumps(data))
***other code removed updating status bars***
return r
else:
***other code removed updating status bars***
我的开发环境只能访问一个客户,但是仍然需要我将customerId发布到POST。
我已经尝试了数百种将其转换为发布文件的变体,这些内容来自我在请求站点教程和其他一些stackoverflow问题上所阅读的内容。这将发布到API packageFiles。根据我所访问的Swagger页面,它说,在仍上传文件时,我需要包括ID和客户ID。
def apiPost(token):
if not token == "":
status.run_set_text('Running API POST Call', 3)
headers = {'Authorization':'Bearer '+str(token)}
files = {'file': open('log.txt', 'rb')}
data = {"data":{ 'id':0, 'customerId':33}}
r = requests.post(api_url+"v1.1/package_files/"+set_api_pair_value, headers=headers, data=json.dumps(data), file=files)
***other code removed updating status bars***
return r
else:
***other code removed updating status bars***
答案 0 :(得分:0)
首先,您应该将代码格式化为整洁,美观和可读
我正在尝试解决您的问题,但是我认为您应该在问题上附加一些预期的数据,文件,请求参数。
def apiPost(token):
if not token == "":
status.run_set_text('Running API POST Call', 3)
headers = { 'Content-Type':'application/json',
'Authorization':'Bearer '+str(token) }
data = {"data":
{ 'id':0,
'customerId':33,
'name':'567tuhj',
'description':'sdfgsdfg'
}
}
#The part you are looking for probably
files = {'name_of_file_field' : open("rb", file)}
r = requests.post(api_url+"v1.1/groups/", headers=headers, data=json.dumps(data), files = files)
***other code removed updating status bars***
return r
else:
***other code removed updating status bars***
答案 1 :(得分:0)
评论:我返回了400(错误请求),并带有已接受的答案。
{"status":"FAILURE", "error":[{"code":"5004", "name":"General Error","severity":"3","message":"Error Occurred During the operation", "details":{"5004":"General Error null"}}]} {'Connection': 'keep-alive', 'X-Powered-By': 'Undertow/1', 'Server': 'WildFly/9', 'Content-Length': '172', 'Content-Type': 'application/json;charset=UTF-8', 'X-Application-Context': 'application:9090', 'Date': 'Fri, 28 Sep 2018 17:57:57 GMT'}
请编辑您的问题并添加Python和requests
版本!
尝试使用文本文件而不是图像进行以下操作:
import requests
url = 'http://httpbin.org/anything'
files = {'file': ('helloworld.txt', open('../test/helloworld.txt', 'rb'), 'text/text')}
data = dict(name='barca', country='spain')
r = requests.post(url, files=files, data=data)
# Print my requests.post header, files and data.
r_dict = r.json()
for key in r_dict:
print('{}:{}'.format(key, r_dict[key]))
来自http://httpbin.org/anything的回复:
<Response [200]>
我的
requests.post
标头,文件和数据从主机发回。method:POST files:{'file': 'Hello World'} url:http://httpbin.org/anything form:{'name': 'barca', 'country': 'spain'} origin:xx.xx.xx.xx args:{} headers:{'Content-Length': '369', 'Accept': '*/*', 'Content-Type': 'multipart/form-data; boundary=bc3c1927f542430f8166e8f3f27f3c72', 'Host': 'httpbin.org', 'Connection': 'close', 'User-Agent': 'python-requests/2.11.1', 'Accept-Encoding': 'gzip, deflate'} json:None data:
使用Python:3.4.2测试-请求:2.11.1