2012-05-04 1 views
0

Я пытаюсь загрузить файл исходного кода с веб-сайта, который отлично подходит для небольших файлов, но несколько более крупных обрезаются.Использование MSXML2.ServerXMLHTTP для доступа к данным с веб-страницы возвращает усеченные данные в Lua

В приведенном ниже примере следует возвращающему файлу 146,135 байт, но возвращает один из 141194 байт со статусом 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() 
data = http.Responsetext 
print('Data Size = '..#data) 
print('----------------------------------------------------------------') 
print(headers) 

ответ

0

Я, наконец, решил, что происходит, поэтому опубликуйте его здесь для других.

Чтобы избежать усечения, мне нужно было использовать ResponseBody, а не ResponseText, то, что, по-видимому, происходит, является отправкой файла в двоичном формате, данные ResponseText имеют такое же количество байтов, что и ResponseBody, но находятся в UTF -8, это означает, что число, если специальные символы в файле (которые являются двойными байтами в UTF-8, удаляются с конца ResponseText. Я не уверен, на каком уровне выполнена «ошибка» в длине, но способ избежать этого - использовать ResponseBody.