我使用LuaForWindows(最新版本),我已阅读this和this回答以及我在lua-users.org的mailinglist找到的所有内容。我尝试(大多数)网站只响应301或302.我创建了一个示例批处理脚本,从他们的手册页下载(部分)OpenGL 2.1参考。
@ECHO OFF
FOR /F "SKIP=5" %%# IN ( %~fs0 ) DO lua -l socket.http -e "print(socket.http.request('https://www.opengl.org/sdk/docs/man2/xhtml/%%#.xml'))"
GOTO:EOF
glAccum
glActiveTexture
glAlphaFunc
glAreTexturesResident
glArrayElement
glAttachShader
glBegin
glBeginQuery
glBindAttribLocation
glBindBuffer
最重要的部分是:
print(require('socket.http').request('https://www.opengl.org/sdk/docs/man2/xhtml/glAccum.xml')) -- added glAccum so you can run it
此ALWAYS返回301.当从其他随机页面下载时,我也会发生这种情况。 (我没有注意到它们所以我不能列出一个列表,但我碰巧发现其中一些使用了cloudflare。)
如果我使用URL和openConnection()在Java中编写等效的下载程序,它将不会重定向。
我已尝试手动重定向(设置refferer和stuff)并使用the 'generic' way。正如其他答案中所述的大多数提示一样。
答案 0 :(得分:2)
您使用的是socket.http
,但尝试访问https
网址。 luasocket不处理HTTPS协议,因此它将请求发送到默认端口80,并获得重定向到HTTPS链接(相同链接);这种情况持续了好几次(因为URL没有真正改变),最后luasocket放弃了产生消息。
解决方案是install luasec并使用ssl.https
模块来执行请求。