luaSocket HTTP 请求总是返回重定向(301或302)

我使用 LuaForWindows(最新版本),并阅读了答案以及在lua-users.org的邮件列表中能找到的所有内容。无论我尝试什么(大多数)网站只返回301或302。我创建了一个示例批处理脚本,从其man页面下载了(一些)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

这总是返回301。当我从其他随机页面下载时,这也会发生在我身上。(我没有记录它们,所以我不能给出一个列表,但我发现其中一些使用cloudflare。)

如果我使用URLopenConnection()在Java中编写等效的下载器,它将不会重定向。

我已经尝试手动跟随重定向(设置refferer和其他内容)并使用the 'generic' way。正如其他答案中大部分提示的那样。

点赞
用户1442917
用户1442917

你正在使用socket.http,但尝试访问https URL。luasocket无法处理HTTPS协议,因此它会向默认端口80发送请求,并获得重定向到HTTPS链接(相同的链接);这样会多次进行(因为URL实际上并没有更改),最终luasocket放弃并产生消息。

解决方法是安装luasec,并使用ssl.https模块进行请求。

2016-05-31 21:01:49