Https 为什么web服务器会回复301和请求的确切位置?

Https 为什么web服务器会回复301和请求的确切位置?,https,lua,http-status-code-301,luasocket,luasec,Https,Lua,Http Status Code 301,Luasocket,Luasec,我正在尝试通过https从web服务器检索页面,使用lua和luasec。对于大多数页面,我的脚本按预期工作,但如果ressource包含特殊字符(如“é”),我将被发送到一个包含301响应的循环中 让这段代码来说明我的困境(实际的服务器详细信息经过编辑以保护无辜者): 这导致了矛盾 HTTP/1.1 301永久移动-GET用于“https://www.example.com/S%C3%A9ance" 标题为{[“内容类型”]=“文本/html;字符集=UTF-8”;[“设置cookie”]=“

我正在尝试通过https从web服务器检索页面,使用lua和luasec。对于大多数页面,我的脚本按预期工作,但如果ressource包含特殊字符(如“é”),我将被发送到一个包含301响应的循环中

让这段代码来说明我的困境(实际的服务器详细信息经过编辑以保护无辜者):

这导致了矛盾

HTTP/1.1 301永久移动-GET用于“https://www.example.com/S%C3%A9ance"
标题为{[“内容类型”]=“文本/html;字符集=UTF-8”;[“设置cookie”]=“PHPSESSID=e80oo5dkouh8gh0ruit7mj28t6;路径=/”;[“内容长度”]=“0”;[“连接”]=“关闭”;[“日期”]=“2017年3月15日星期三19:31:24 GMT”[“位置”]=“S%C3%A9ance”]
正文为“”
平等的
HTTP/1.1 301已永久移动-GET用于“https://www.example.com/S%C3%A9ance“


如何使用lua和尽可能少的附加依赖项检索难以捉摸的页面?

看起来很明显,可能请求的url与实际位置不同

如果您有类似的问题,请深入检查您的外部库,确保它们执行您认为它们执行的操作

在本例中,luasocket对url进行了url解码,然后对url进行了url编码,因此最终的请求并不像看上去那样

local https = require "ssl.https"
local prefix = "https://www.example.com"
local suffix = "/S%C3%A9ance"
local body,code,headers,status = https.request(prefix .. suffix)
print(status .. " - GET was for \"" .. prefix .. suffix .. "\"")
print("headers are " .. myTostring(headers))
print("body is " .. myTostring(body))
if suffix == headers.location then
    print("equal")
else
    print("not equal")
end
local body,code,headers,status = https.request(prefix .. headers.location)
print(status .. " - GET was for \"" .. prefix .. suffix .. "\"")