从RESTAPI url下载python中的大型zip文件只会导致下载1KB的文件

2024-09-29 21:52:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python中的请求从restapi URL端点(这是一个公司的私有URL)下载大型.zip扩展名文件,下载的文件最终被下载1KB,因此是无效的。 1我也曾尝试过urllib库,但结果都是一样的 1Kb文件下载无效。 2当从浏览器点击URL时,URL端点下载文件 但不使用python代码下载。你知道吗

  1. 我曾尝试在python中使用urllib库,但没有成功。你知道吗
  2. 我也用过克林特图书馆,但也没用。你知道吗
    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)


Tags: 文件代码urldatagetparamtitlecontent

热门问题