def api_request_curl(url, data=None, token=None, https_proxy=None, method=None):
command = ["curl", '-K', '-', url]
token = token if token != None else token_auth_string()
config = ['--header "Authorization: token ' + token + '"',
'--header "Accept: application/json"',
'--header "Content-Type: application/json"',
"--silent"]
if method:
config.append('--request "%s"' % method)
# https_proxy = https_proxy if https_proxy != None else settings.get('https_proxy')
# if https_proxy:
# config.append(https_proxy)
with named_tempfile() as header_output_file:
config.append('--dump-header "%s"' % header_output_file.name)
header_output_file.close()
with named_tempfile() as data_file:
if data is not None:
data_file.write(bytes(data.encode('utf8')))
data_file.close()
config.append('--data-binary "@%s"' % data_file.name)
process = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
response, _ = process.communicate(bytes('\n'.join(config).encode('utf8')))
returncode = process.returncode
if returncode != 0:
raise subprocess.CalledProcessError(returncode, 'curl')
with open(header_output_file.name, "r") as headers:
_, responsecode, message = headers.readline().split(None, 2)
responsecode = int(responsecode)
if responsecode == 204: # No Content
return None
elif 200 <= responsecode < 300 or responsecode == 100: # Continue
return json.loads(response.decode('utf8', 'ignore'))
else:
raise SimpleHTTPError(responsecode, response)
评论列表
文章目录