2017-03-15 3 views
0

J'essaie de récupérer des pages d'un serveur web via https, en utilisant lua avec luasec. Pour la plupart des pages, mon script fonctionne comme prévu, mais si la ressource contient des caractères spéciaux (comme, 'é), je suis envoyé dans une boucle avec 301 réponses.Pourquoi un serveur Web répondrait-il avec 301 et l'emplacement exact demandé?

laisser ce code sniplet illustrer mon dilemme (détails du serveur réel caviardés pour protéger les innocents):

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 .. "\"") 

qui aboutit à la

paradoxale

HTTP/1.1 301 Moved Permanently - GET was for "https://www.example.com/S%C3%A9ance" headers are { ["content-type"]="text/html; charset=UTF-8";["set-cookie"]="PHPSESSID=e80oo5dkouh8gh0ruit7mj28t6; path=/";["content-length"]="0";["connection"]="close";["date"]="Wed, 15 Mar 2017 19:31:24 GMT";["location"]="S%C3%A9ance";} body is "" equal HTTP/1.1 301 Moved Permanently - GET was for "https://www.example.com/S%C3%A9ance"

Comment peut-on être en mesure de récupérer les pages insaisissables, en utilisant lua et aussi peu de dépendances supplémentaires que possible?

Répondre

0

Il est évident que l'URL demandée peut être différente de l'emplacement réel.

Si vous avez un problème similaire, vérifiez au plus profond de vos bibliothèques externes pour vous assurer qu'elles font ce que vous pensez qu'elles font. Dans ce cas, luasocket a fait urldecode puis urlencode l'URL et donc la demande finale n'était pas ce qu'elle semblait être.