0

Webサイトからソースコードファイルをダウンロードしようとしていますが、小さいファイルでは問題なく動作しますが、大きいファイルのいくつかは切り捨てられます。

以下の例では、サイズが146,135バイトのファイルを返す必要がありますが、ステータスが200の141,194バイトの1つを返します。

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)
4

1 に答える 1

0

私はついに何が起こっているのかを理解したので、他の人のためにここに投稿します。

ResponseTextではなくResponseBodyを使用するために必要な切り捨てを回避するために、ファイルがバイナリ形式で送信されているように見えます。ResponseTextデータはResponseBodyと同じバイト数ですが、UTF-8形式です。これは、ファイル内の特殊文字(UTF-8では2バイト)がResponseTextの末尾から削除された場合の数を意味します。長さの「間違い」がどのレベルで行われるかはわかりませんが、回避する方法ResponseBodyを使用することです。

于 2012-05-09T16:53:56.703 に答える