使用MSXML2.ServerXMLHTTP从网页访问数据在Lua中返回被截断的数据。

我正在尝试从一个网站下载一个源代码文件,在小文件方面运作良好,但对于一些较大的文件会被截断。

下面的示例应该返回一个大小为146,135字节的文件,但返回了一个大小为141,194字节的状态码为200的文件。

我也尝试过winhttp.winhttprequest.5.1,但两者似乎在同一点被截断。

我也找到了很多类似的问题,但未能找到解决方案。

require('luacom')

http= luacom.CreateObject('MSXML2.ServerXMLHTTP')

http:Open(“GET”,“http://www.family-historian.co.uk/wp-content/plugins/forced-download2/download.php?path=/wp-content/uploads/formidable/tatewise/&file=Map-Life-Facts3.fh_lua&id=190”,true)
http:Send()
http:WaitForResponse(30)
print'Status:'..http.Status)
print'-------------------------------------------------- --------------)
headers = http:GetAllResponseHeaders()
数据= http.Responsetext
print('Data Size ='..#data)
print('-------------------------------------------------- --------------)
打印标头

原文链接 https://stackoverflow.com/questions/10451064

点赞
stackoverflow用户438753
stackoverflow用户438753

我最终弄清楚了发生了什么,所以在这里发帖给其他人。

为了避免截断,我需要使用 ResponseBody 而不是 ResponseText,看起来文件以二进制格式发送,ResponseText 数据与 ResponseBody 数据的字节数相同,但以 UTF-8 格式为基础,这意味着文件中的特殊字符数量(这些特殊字符在 UTF-8 中是双字节的)会从 ResponseText 的末尾被丢弃。我不确定在哪个级别上“错误”发生了,但避免这种情况的方法是使用 ResponseBody。

2012-05-09 16:53:56