使用系统代理进行Web请求的Luasocket替代方案
2015-4-17 16:49:29
收藏:0
阅读:143
评论:1
我已经有两个关于Lua和Web请求的问题,但我仍然在挣扎。
我仍然需要通过URL下载文件,多亏了Paul Kulchenko,我找出了我最初失败的主要原因:我所在的企业网络阻止了传出请求,可能是一个DMZ、防火墙或公司使用的其他东西。使用公司代理之一应该解决我的问题,但并没有。
以下是我正在使用的代码:
-- retrieve the content of a URL
local socket = require("socket")
local http = require("socket.http")
local inspect = require("inspect")
--http.PROXY = "http://my.company.proxy.com:8080"
--http.PROXY = "http://my.company.proxy.com:8080"
--http.PROXY = "http://my.company.proxy.com:8080"
http.PROXY = "http://my.company.proxy.com:8080"
local body, code = http.request("http://pbs.twimg.com/media/CCROQ8vUEAEgFke.jpg")
print(inspect(code))
if not body then error(code) end
-- save the content to a file
local f = assert(io.open('test.jpg', 'wb'))
f:write(body)
f:close()
使用上述代码时,我会出现不同的错误,但仍然是错误..
local http = require("socket.http")
local socket = require("socket")
local inspect = require("inspect")
require("show")
require("ltn12")
local ResFileStr = "CCROQ8vUEAEgFke.jpg"
local PathStr = "http://pbs.twimg.com/media/"
local ResHnd, ErrStr = io.open(ResFileStr, "wb")
if ResHnd then
local Req = {
url = PathStr .. ResFileStr,
sink = ltn12.sink.file(ResHnd),
--proxy = "http://my.company.proxy.com:8080"
--proxy = "http://my.company.proxy.com:8080"
--proxy = "http://my.company.proxy.com:8080"
--proxy = "http://my.company.proxy.com:8080"
proxy = "http://my.company.proxy.com:8080"
}
local Response = {http.request(Req)}
ObjectShow(Response, "Response")
print(inspect(Response))
else
io.write("Error opening ", ResFileStr, " for writing\n")
end
我得到的错误要么是500域名未找到,要么是404未找到。
当我使用Microsoft的.NET框架和System.net.WebClient类时,下载文件或访问网站都没有问题。不幸的是,我不知道Microsoft的类做了什么不同,所以我猜它是更高级的代码使用我的系统设置为代理。
因此,我的问题是:除了Luasocket之外,是否有类似的“高级”库或其他库可以使用?我看了一眼libcurl、luacurl,但它们似乎比luasocket更复杂。还是说我能用lua得到这个工作?或者我的lua方法完全错误?
附:inspect是kikito的库(可在github上找到用于调试),而show只是这个脚本和这个函数
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
你可以尝试使用Lua-cURL库。
因为我没有代理,所以代码未经测试
local cURL = require "cURL" local f = assert(io.open('test.jpg', 'wb')) cURL.easy{ url = "http://pbs.twimg.com/media/CCROQ8vUEAEgFke.jpg", proxy = "http://my.company.proxy.com:8080", writefunction = f } :perform() :close() f:close()