301 与 socket.http 永久移动

Alg*_*thm 3 sockets lua http

在 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")
Run Code Online (Sandbox Code Playgroud)

它输出一个 HTTP 错误页面(永久移动)和

301    table: 0x8f32470    http/1.1 301 Moved Permanently
Run Code Online (Sandbox Code Playgroud)

该表的内容是:

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
Run Code Online (Sandbox Code Playgroud)

为什么只有 Lua 会出现这个错误?如果我向 google 请求,我会得到 google 主页 HTML。如果我请求 status.mojang.com,我会在 JSON 响应字符串中获取 mojang 服务器状态,因此套接字肯定可以正常工作。

Pau*_*nko 6

这是因为您正在使用socket.httphttpsURL请求页面;由于socket.http不处理https,它将请求发送到端口 80,该端口被转发到httpsURL,但socket库不遵循该重定向,因为它不“知道”如何处理 https,因此它只报告 301。

您需要安装和使用 luasec 并使用ssl.https而不是socket.http,这将使其工作。

  • 不; 你需要 luasocket 和 luasec。 (2认同)