Python请求上传文件 - 413请求实体过大

3

我有以下脚本,可以让我将文件上传到bestream.tv。但是对于超过95MB的文件无法上传。需要做哪些更改才能实现呢?

import requests
import re

sessionObj = requests.session()
sessionObj.post('http://bestream.tv/login.html', data={'loginUsername':'my_user', 'loginPassword':'my_pass', 'submitme':'1'})
filehandle = open('Diabolik Lovers - 12.mp4', 'rb')

resp = sessionObj.get('http://bestream.tv/account_home.html')

url_form = re.search('url: \'(http:\/\/.*)?\'', resp.text).group(1)
sessionid = re.search('_sessionid:\s\'(.*)?\', cTracker:', resp.text).group(1)
ctracker = re.search('cTracker:\s\'(.*)?\', maxChun', resp.text).group(1)

r = sessionObj.post(url_form, data={'_sessionid':sessionid, 'folderId':'', \
                    'cTracker':ctracker, 'maxChunkSize':'100000000'}, files={'files[]':(filehandle.name, filehandle)})

print(r.text)

这将作为结果打印出来:

413 Request Entity Too Largue

要从网页上传文件,我在Chrome浏览器中获取以下结果->网络:

Accept:application/json, text/javascript, */*; q=0.01
Content-Disposition:attachment; filename="Diabolik%20Lovers%20-%206.5.mp4"
Content-Range:bytes 0-99999999/168152948
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryHNdI5JvVzIVROkWQ
Origin:http://bestream.tv
Referer:http://bestream.tv/account_home.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36


Accept:application/json, text/javascript, */*; q=0.01
Content-Disposition:attachment; filename="Diabolik%20Lovers%20-%206.5.mp4"
Content-Range:bytes 100000000-168152947/168152948
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryfsXuVqiBMXo1Vtn7
Origin:http://bestream.tv
Referer:http://bestream.tv/account_home.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36

直到文件上传完成为止。

因此,我暗示它每增加100000000字节就会上升。我该如何修改我的脚本才能实现相同的效果?

1个回答

3
您遇到的错误是Web服务器告诉您,实际上您无法上传更大的文件。服务器接受的请求大小取决于服务器管理员,而不受客户端(您的代码)控制。
我假设,因为requests文档没有明确说明:使用maxChunkSize发布将允许“分块”HTTP传输(请参见:http://en.wikipedia.org/wiki/Chunked_transfer_encoding),这仍然保留文件大小,因为分块在另一个抽象层上进行。
很抱歉,您需要自己切割文件并逐个提交POST请求。

所以我在查看上传时的网络行为和网页代码时发现,文件被分成了一些块,这些块的大小被定义为“maxChunkSize”“100000000”。我该如何将文件分成几个部分发送? - Marco
我更新了我的回答。你可能误解了maxChunkSize的含义。 - knitti
我更新了我的问题。我阅读了你发送给我的链接,但比之前更迷茫了,我不知道如何解决我的问题。 - Marco
将您的文件切成小于 Web 服务器接受的大小。上传每个部分。 - knitti
我应该如何做,以便最终在服务器上获得所有的部分? - Marco
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接