Luasocket自定义标头,404转为301

时间:2012-04-28 04:38:09

标签: sockets http-headers lua luasocket

我之前的问题是使用socket.http模块在​​ lua 中获取网页标题。问题lies here。以前,youtube网页引导我进入 404错误页面。根据{{​​3}},我为请求设置了自定义HOST标头。这就是我所做的,结果是什么:

代码

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

结果

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

据我所知,错误基本上是因为X-Content-Type-Optionsnosniff。读取它的MattJ's help,我知道唯一定义的值“nosniff”阻止Internet Explorer从声明的内容类型中嗅探响应。


请帮助我,以便我可以使用自定义代理并从他们的正文中获取youtube(以及上一个问题中提到的其他一些网站)标题。这是我目前拥有的完整LUA文件:

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

2 个答案:

答案 0 :(得分:3)

我相信这条线应该改变:

 header = { host= "youtube.com" }

要:

 header = { host= "www.youtube.com" }

之后,对我有用。

答案 1 :(得分:0)

  

解决方案是install luasec并使用ssl.https模块来执行请求。

here已回复Paul Kulchenko

示例:

-- luasec version 0.4.2
require("ssl")
require("https")
-- ssl.https.request(...)