sockets - Encabezados personalizados Luasocket, 404 vueltas a 301
http-headers (2)
Creo que esta línea debe ser cambiada:
header = { host= "youtube.com" }
A:
header = { host= "www.youtube.com" }
Después de eso, funciona para mí.
Mi pregunta anterior era acerca de obtener el título de la página en lua usando el módulo socket.http
. La pregunta está aquí . Anteriormente, las páginas de youtube me llevaron a una página de error 404 . Basado en la ayuda de MattJ , puse un encabezado HOST
personalizado para la solicitud. Esto es lo que hice y cuál fue el resultado:
Código
header = { host= "youtube.com" }
local result,b,c,h = http.request{ url = "http://www.youtube.com/watch?v=_eT40eV7OiI", headers = header }
print ( result, b, c, h )
for k,v in pairs(c) do print(k,v) end
Resultado
1 301 table: 0047D430 HTTP/1.1 301 Moved Permanently
x-content-type-options nosniff
content-length 0
expires Tue, 27 Apr 1971 19:44:06 EST
cache-control no-cache
connection close
location http://www.youtube.com/watch?v=_eT40eV7OiI
content-type text/html; charset=utf-8
date Sat, 28 Apr 2012 04:26:21 GMT
server wiseguy/0.6.11
Por lo que pude entender a partir de esto, el error se debe básicamente a X-Content-Type-Options
nosniff
. Al leer su documentación , llegué a saber que el único valor definido, "nosniff", evita que Internet Explorer MIME detecte una respuesta lejos del tipo de contenido declarado .
Ayúdeme para poder usar el proxy personalizado y obtener el título de youtube (y algunos otros sitios, como se menciona en la pregunta anterior) de su cuerpo. Aquí está el archivo LUA completo que tengo actualmente:
local http = require "socket.http"
http.PROXY="http://<proxy address here>:8080"
header = { host= "youtube.com" }
local result,b,c,h = http.request{ url = "http://www.youtube.com/watch?v=_eT40eV7OiI", headers = header }
print ( result, b, c, h )
for k,v in pairs(c) do print(k,v) end
La solución es instalar luasec y usar el módulo ssl.https para hacer la solicitud.
¡Respondido aquí por Paul Kulchenko !
Ejemplo:
-- luasec version 0.4.2
require("ssl")
require("https")
-- ssl.https.request(...)