我正在使用python中的请求从restapi URL端点(这是一个公司的私有URL)下载大型.zip扩展名文件,下载的文件最终被下载1KB,因此是无效的。 1我也曾尝试过urllib库,但结果都是一样的 1Kb文件下载无效。 2当从浏览器点击URL时,URL端点下载文件 但不使用python代码下载。你知道吗
with open(dir+"/"+dict['title'], 'wb') as dumpstate_file:
print("downloading")
for chunk in response.iter_content(chunk_size=4096):
if(chunk):
dumpstate_file.write(chunk)
with open(dir+"/"+dict['title'], 'wb') as out:
total_length = int(r.headers.get('content-length'))
for ch in progress.bar(r.iter_content(chunk_size = 2391975), expected_size=(total_length/1024) + 1):
if ch:
out.write(ch)
r = http.request('GET', url, preload_content=False)
print("downloading")
with open(dir+"/"+dict['title'], 'wb') as out:
while True:
data = r.read(8192)
if not data:
break
out.write(data)
没有错误消息。 这里的问题是,这里下载的文件只有1KB,是无效的。你知道吗
更新
我找到了解决这个问题的办法。我在anaconda提示符下运行了相同的curl请求,zip文件下载成功。你知道吗
这是我运行的卷曲请求:
curl --data-urlencode "singleId=alok3.singh" --data-urlencode "appId=SRI_N_TOOL" --data-urlencode "userLang=KO" --data-urlencode "serviceCode=GET_FILE" --data-urlencode "divisionCode=00" --data-urlencode "param={'divisionCode':'25','docId':'00DFOJ57StPMWL1000','title':'CallerId[1].zip','fileId':'00DFOJ57LtPMWL1000'}" -o CallerId[1].zip http://{private company url}/fileapi/getFile.do
我不知道如何在我的python脚本中使用这段特定的代码,因为我需要自动化这些下载。你知道吗
进一步更新
我使用了python的subprocess函数来使用这个curl请求,我在上面的更新中提到过。你知道吗
下面是子流程调用的代码: 下面的代码工作得非常好,可以下载完整的文件
subprocess.call(["curl", "--data-urlencode", "singleId=alok3.singh", "--data-urlencode", "appId=SRI_N_TOOL", "--data-urlencode", "userLang=KO", "--data-urlencode", "serviceCode=GET_FILE", "--data-urlencode", "divisionCode=00", "--data-urlencode", "param={'divisionCode':'25','docId':'00DF','title':'hello.zip','fileId':'tPMWL'}","-o","hello.zip","https://privateurl"])
但这里有一个陷阱: 当我用包含docId的字符串变量替换docId时,下载就不起作用了。你知道吗
docId='00DF'
subprocess.call(["curl", "--data-urlencode", "singleId=alok3.singh", "--data-urlencode", "appId=SRI_N_TOOL", "--data-urlencode", "userLang=KO", "--data-urlencode", "serviceCode=GET_FILE", "--data-urlencode", "divisionCode=00", "--data-urlencode", "param={'divisionCode':'25','docId':docId,'title':'hello.zip','fileId':'tPMWL'}","-o","hello.zip","https://privateurl"])
解决方案
这里需要的是json.dumps文件()和json.loads文件()用于参数以提取变量。你知道吗
param = json.dumps({
'divisionCode':'25',
'docId':docId,
'title':title,
'fileId':title
})
args = ["curl", "--data-urlencode", "singleId=alok3.singh", "--data-urlencode", "appId=SRI_N_TOOL", "--data-urlencode", "userLang=KO", "--data-urlencode", "serviceCode=GET_FILE", "--data-urlencode", "divisionCode=00", "--data-urlencode", "param={0}".format(json.loads(param)),"-o","CallerId[1].zip","http://private url"]
subprocess.call(args)
目前没有回答
相关问题 更多 >
编程相关推荐