2015-05-05 629 views
1

我有以下脚本,允许我将文件上传到bestream.tv。 这对于95MB以上的文件不起作用。可以做出什么改变?Python请求上传文件 - 413请求实体太大

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 

要上传网页文件,我得到这些结果在浏览器 - >网络:

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

您正在收到的错误是Web服务器告诉您的方式,事实上您无法上传更大的文件。服务器接受多大的请求取决于服务器管理员,而不是以任何方式控制客户端(您的代码)。

我假设,因为requests的文档不明确告诉:发布与maxChunkSize将允许“分块” HTTP传输(参见:http://en.wikipedia.org/wiki/Chunked_transfer_encoding)留下仍然文件大小不变,因为分块在另一个抽象层上。

恐怕你不得不自己分割文件,并张贴每一块。

+0

因此,我正在查看上传时网络和网络行为的代码,将文件上传到定义为'maxChunkSize''100000000'的片段中。我怎么能把文件分成几块? – Marco

+0

我更新了我的答案。你可能会误认为'maxChunkSize'的东西不是。 – knitti

+0

我更新了我的问题。我读了你送给我的链接,但我比以前更加迷失,我不知道如何指导我的问题。 – Marco