-
-
Notifications
You must be signed in to change notification settings - Fork 624
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
httpc request twice,the second time return err of closed #299
Comments
Don't try to reuse your I don't really understand what your In short, always call |
`ocal http = require("resty.http") -- 获取参数变量url if not url then local httpc = http.new() -- 发起HTTP请求获取URL的响应 if not res then -- 获取响应的文本内容 httpc = http.new() if not res then ngx.header["Content-Type"] = res.headers["Content-Type"] at first,i had tried your way. but i also get some err of closed. then i use chatgpt who advised me to use connection pool. however, i do not known why new http instance also get closed err. anyway, thanks for your answer. |
Well turns out ChatGPT doesn't know what it's talking about. Who could have guessed? ;) Why are you passing the string "body " as a URL? Do you not mean to use it as a variable? It wouldn't hurt to log the body to be sure you have a proper URL. An undocumented tip: Call |
`
-- 引入必要的Lua库
local http = require("resty.http")
-- 创建全局的连接池
local httpc_pool = {}
-- 获取参数变量url
local url = ngx.var.arg_url
if not url then
ngx.status = ngx.HTTP_BAD_REQUEST
ngx.say("Missing 'url' parameter")
ngx.exit(ngx.HTTP_BAD_REQUEST)
end
-- 从连接池中获取连接
local httpc = httpc_pool[url]
if not httpc then
-- 连接池中没有可用的连接,创建一个新的连接
httpc = http.new()
httpc_pool[url] = httpc
end
-- 发起HTTP请求获取URL的响应
local res, err = httpc:request_uri(url, {
method = "GET",
ssl_verify = false,
headers = {
["User-Agent"] = "Mozilla/5.0 (compatible; Lua-resty-http/0.15; +https://github.com/pintsized/lua-resty-http)",
}
})
if not res then
ngx.status = ngx.HTTP_INTERNAL_SERVER_ERROR
ngx.say("Failed to request meiya image URL: ", err)
ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
end
-- 获取响应的文本内容
local body = res.body
-- 请求并返回图片数据
res, err = httpc:request_uri("body ", {
method = "GET",
ssl_verify = false,
headers = {
["User-Agent"] = "Mozilla/5.0 (compatible; Lua-resty-http/0.15; +https://github.com/pintsized/lua-resty-http)",
}
})
if not res then
ngx.log(ngx.ERR, "request err.", err)
ngx.status = ngx.HTTP_INTERNAL_SERVER_ERROR
ngx.say('请求失败!',err)
ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
end
ngx.header["Content-Type"] = res.headers["Content-Type"]
ngx.print(res.body)
ngx.flush(true)
`
this is my lua script; when i modify body as url constant, the second reuqest is all right. when body is a variable, second request's res is nil and err msg is closed.
can anyone figure out code's mistake?
The text was updated successfully, but these errors were encountered: