2

我之前的问题是关于使用模块在lua中获取页面标题。socket.http问题就在这里。以前,youtube 页面将我带到404 错误页面。根据MattJ 的帮助,我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-Optionsvalue nosniff。阅读它的文档后,我了解到唯一定义的值“nosniff”会阻止 Internet Explorer MIME 嗅探远离声明的 content-type 的响应


请帮助我,以便我可以使用自定义代理并从他们的正文中获取 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
4

2 回答 2

3

我相信这条线应该改变:

 header = { host= "youtube.com" }

到:

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

之后,为我工作。

于 2012-04-28T19:49:06.443 回答
1

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

保罗库尔琴科在这里回答

例子:

-- luasec version 0.4.2
require("ssl")
require("https")
-- ssl.https.request(...)
于 2016-06-01T18:58:33.983 回答