Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将cURL转换为Python语言?_Python_Curl_Amazon S3_Python Requests - Fatal编程技术网

如何将cURL转换为Python语言?

如何将cURL转换为Python语言?,python,curl,amazon-s3,python-requests,Python,Curl,Amazon S3,Python Requests,我很难将cURL选项转换为Python请求,以便将文件上载到云服务器Picloud。根据他们的描述,第一步是向PiCloud发布一个创建新文件的请求,以创建此上传的票证。第二步是发送从该票据中提取的指令以上载文件 我同意第一步。但我对第二个有疑问 第一步,创建上传票据 cURL语句: $ curl -k -u 'key:secret_key' -X POST https://api.picloud.com/file/new/ -d name=file_name $ curl -L "https

我很难将cURL选项转换为Python请求,以便将文件上载到云服务器Picloud。根据他们的描述,第一步是向PiCloud发布一个创建新文件的请求,以创建此上传的票证。第二步是发送从该票据中提取的指令以上载文件

我同意第一步。但我对第二个有疑问

第一步,创建上传票据

cURL语句:

$ curl -k -u 'key:secret_key' -X POST https://api.picloud.com/file/new/ -d name=file_name
$ curl -L "https:/.s3.amazonaws.com/" -F "AWSAccessKeyId=1"  -F "success_action_redirect=https://api.picloud.com/file/uploaded/1234" -F "acl=info" -F "key=info"  -F "signature=info" -F "policy=info" -F content-type="info" -F file=your_file_to_upload
我的请求代码:

r = requests.post('https://api.picloud.com/file/new/',auth=(api_key,api_secretkey), verify=False, data={'name':'file_name'})
这张票看起来像:

{"ticket": {"AWSAccessKeyId": "AKIAJCY7JV52WD4MJSNQ", 
"success_action_redirect": "https://api.picloud.com/file/uploaded/3303/4600939/4a6317595a03f85fbbe9102b2454119dc35d3969/", 
"acl": "private", 
"key": "44ec7b76cb3e046986e82b3f13b2da30208d43a5/your_file_name", 
"signature": "TzFhvowtJnBm2+HCvTSlZkBxM5w=", 
"policy": "eyJjb25kaXRpb25zIjogW3siYnVja2V0IjogInBpLXVzZXItZmlsZXMifSwgeyJrZXkiOiAiNDRlYzdiNzZjYjNlMDQ2OTg2ZTgyYjNmMTNiMmRhMzAyMDhkNDNhNS95b3VyX2ZpbGVfbmFtZSJ9LCB7ImFjbCI6ICJwcml2YXRlIn0sIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cHM6Ly9hcGkucGljbG91ZC5jb20vZmlsZS91cGxvYWRlZC8zMzAzLzQ2MDA5MzkvNGE2MzE3NTk1YTAzZjg1ZmJiZTkxMDJiMjQ1NDExOWRjMzVkMzk2OS8ifSwgWyJzdGFydHMtd2l0aCIsICIkQ29udGVudC1UeXBlIiwgIiJdXSwgImV4cGlyYXRpb24iOiAiMjAxMi0wNS0xMVQwMTo1MDo0NFoifQ==",
"Content-Type": "application/octet-stream"}, 
"params": {"action": "https://pi-user-files.s3-external-1.amazonaws.com/"}}
第二步,上传文件

基本上,在翻译
cURL-L
-F
选项时,我不太理解。根据cURL的指令,-L表示重定向,-F表示填写为表单

cURL语句:

$ curl -k -u 'key:secret_key' -X POST https://api.picloud.com/file/new/ -d name=file_name
$ curl -L "https:/.s3.amazonaws.com/" -F "AWSAccessKeyId=1"  -F "success_action_redirect=https://api.picloud.com/file/uploaded/1234" -F "acl=info" -F "key=info"  -F "signature=info" -F "policy=info" -F content-type="info" -F file=your_file_to_upload
我糟糕的审判:

up_d={"AWSAccessKeyId": "AKIAJCY7JV52WD4MJSNQ", "success_action_redirect": "https://api.picloud.com/file/uploaded/3303/4596631/28ec3c3898bec2523759e15cd62fb39fa62b5c53/", 
      "acl": "private", "key": "44ec7b76cb3e046986e82b3f13b2da30208d43a5/your_file_name", "signature": "BLsaltt+Ohua4tPPISr2eV2Tr8c=", 
      "policy": "eyJjb25kaXRpb25zIjogW3siYnVja2V0IjogInBpLXVzZXItZmlsZXMifSwgeyJrZXkiOiAiNDRlYzdiNzZjYjNlMDQ2OTg2ZTgyYjNmMTNiMmRhMzAyMDhkNDNhNS95b3VyX2ZpbGVfbmFtZSJ9LCB7ImFjbCI6ICJwcml2YXRlIn0sIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cHM6Ly9hcGkucGljbG91ZC5jb20vZmlsZS91cGxvYWRlZC8zMzAzLzQ1OTY2MzEvMjhlYzNjMzg5OGJlYzI1MjM3NTllMTVjZDYyZmIzOWZhNjJiNWM1My8ifSwgWyJzdGFydHMtd2l0aCIsICIkQ29udGVudC1UeXBlIiwgIiJdXSwgImV4cGlyYXRpb24iOiAiMjAxMi0wNS0xMVQwMDozOTo0OFoifQ==", 
      "Content-Type": "application/octet-stream", "file":"new  2.txt"}
    k1=requests.post('https://pi-user-files-test.s3.amazonaws.com/', data=up_d)
错误消息是

<Error><Code>InvalidArgument</Code><Message>Conflicting query string parameters: acl, policy</Message><ArgumentValue>acl</ArgumentValue><ArgumentName>ResourceType</ArgumentName><RequestId>4767425F264FB0CA</RequestId><HostId>K/pAE6BXLJaRRo56ETWw2uYZed8GR+1+VPPU3TI0pZGNyrqz/PAWSzuwtIAHz9eE</HostId></Error>

谢谢你的帮助

看起来您不需要在主体中使用params或AWSAccessKeyID。而且,他们告诉你在正文中插入内容类型而不是在标题中设置内容类型,这对我来说似乎很奇怪。。。在任何情况下,您还需要在请求中设置头。根据curl文档,-F将标题中的内容类型设置为multipart/form数据,因此您也应该在Python中这样做。

您发布的票据真的是实时响应吗?您是否真的发送字符串文字“info”作为这些元素的数据?看起来像是复制粘贴的文档文本。我发现一些S3文档建议,例如,acl应该是私有、公共读、公共读写或经过身份验证的读。这至少可以解释你所犯的错误。谢谢你的回复。我已经更新了真正的票证。现在尝试用票证中的值替换请求正文中的值。请注意,要使其长期有效,您需要使其动态化,这样它将获得一个票证,从票证中提取值,然后使用票证中接收到的值发出第二个请求。@sr2222,我发布的错误是带有替换的错误。有什么建议吗?谢谢我想现在您已经了解了Picloud/您的实现的细节,我对这两个方面都不太了解,文档也不容易被谷歌搜索到。如果你能找到这个错误的含义,我也许能帮你更多的忙。