使用 socket.http 函数时出现了 "301 永久性重定向"

在 Python(和我的浏览器)中,我可以发送一个请求到 https://www.devrant.com/api/devrant/rants?app=3&sort=algo&limit=10&skip=0 并得到期望的响应,但是在 Lua 中,我得到了 HTTP/1.1 301 Moved Permanently 的错误。 我已经尝试了以下方法:

http = require("socket.http");
print(http.request("https://www.devrant.com/api/devrant/rants?app=3&sort=algo&limit=10&skip=0")

这将输出一个 HTTP 错误页面(永久性重定向),并且

301    table: 0x8f32470    http/1.1 301 Moved Permanently

表格的内容如下:

location    https://www.devrant.com/api/devrant/rants?app=3&sort=algo&limit=10&skip=0
content-type    text/html
server    nginx/1.10.0 (Ubuntu)
content-length    194
connection    close
date    Mon, 11 Dec 2017 01:41:35

为什么只有 Lua 出现这个错误?如果我请求 Google,我会得到 Google 的主页 HTML。如果我请求 status.mojang.com,我会得到 Mojang 服务器状态的 JSON 响应字符串,所以某些情况下套接字功能是有效的。

点赞
用户1442917
用户1442917

因为您正在使用 socket.http 来请求一个 https URL 的页面;因为 socket.http 不处理 https,所以它会发送请求到端口 80,然后被转发到 https URL,但是 socket 库不会跟随重定向,因为它不知道如何处理 https,所以它只会报告 301。

您需要安装并使用 luasec,使用 ssl.https 代替 socket.http,这样就可以让它工作了。

2017-12-11 01:57:27