目前,我正在尝试将CURL请求转换为Python脚本。
curl $(curl -u username:password -s https://api.example.com/v1.1/reports/11111?fields=download | jq ".report.download" -r) > "C:\sample.zip"
由于知识限制,我尝试过pycurl但没有成功。
作为一种解决方案,我发现可以通过python运行命令。 https://www.raspberrypi.org/forums/viewtopic.php?t=112351
import os
os.system("curl -K.........")
使用子流程
的其他解决方案(基于搜索更常见)import subprocess
subprocess.call(['command', 'argument'])
目前,我不知道该搬到哪里,以及如何使这个解决方案适应我的目标。
import os
os.system("curl $(curl -u username:password -s https://api.example.com/v1.1/reports/11111?fields=download | jq '.report.download' -r) > 'C:\sample.zip'")
'curl' is not recognized as an internal or external command,
operable program or batch file.
255
P.S。 - 更新v1
有什么建议吗?
import requests
response = requests.get('https://api.example.com/v1.1/reports/11111?fields=download | jq ".report.download" -r', auth=('username', 'password'))
这项工作没有" | jq ".report.download
"这一部分,但这是最后只提供下载文件链接的主要部分。
围绕它吗?
答案 0 :(得分:1)
错误'curl' is not recognized as an internal or external command
表示python无法找到curl的安装位置。如果您已经安装了curl,请尝试提供安装curl
的完整路径。例如,如果curl.exe位于C:\ System32中,则尝试
import os
os.system("C:\System32\curl $(curl -u username:password -s https://api.example.com/v1.1/reports/11111?fields=download | jq '.report.download' -r) > 'C:\sample.zip'")
但那肯定不是pythonic的做事方式。我建议使用requests
模块。
您需要为此调用两次请求模块,首先从https://api.example.com/v1.1/reports/11111?fields=download
下载json内容,获取report.download
指向的新URL,然后再次调用请求以从新URL下载数据。
这些方面的某些内容应该让你前进
import requests
url = 'https://api.example.com/v1.1/reports/11111'
response = requests.get(url, params=(('fields', 'download'),),
auth=('username', 'password'))
report_url = response.json()['report']['download']
data = requests.get(report_url).content
with open('C:\sample.zip', 'w') as f:
f.write(data)
答案 1 :(得分:0)
您可以使用此网站将命令的实际卷曲部分转换为适用于请求的内容:https://curl.trillworks.com/
从那里,只需使用请求对象的.json()
方法来执行您需要进行的任何处理。
最后,可以像这样保存:
import json
with open('C:\sample.zip', 'r') as f:
json.dump(data, f)