lua 傳送http請求

2021-09-02 16:11:10 字數 3997 閱讀 6084

概述:

lua 你可以理解為又一門比較輕便的語言,他對nginx做了很好的支撐。

實現方式有兩種,如下:

方式一:socket.http

包使用:直接解壓安裝,需要注意的是貌似makefile裡面指定了安裝的路徑,所以安裝的時候無需再制定路徑,直接

make

make install

預設應該是在/usr/local下,這是我之前安裝時候遇到的,也許新版會有所不同,具體看readme.txt,安裝好之後的路徑如圖

**示例:

http有get,post於是我就對這兩個方法進行了封裝了下,單寫了乙個lua的檔案如下

-- get請求

-- 參考

end呼叫:

local resstr --響應結果

ngx.log(ngx.warn,"非200狀態,code:"..code)

return resstr

endresstr = res

到此,方式一就介紹結束了

方式二:resty.http

github位址

包說明:這個包不用安裝,直接解壓,然後把要用的lua檔案拷到自己的lualib中就可以了

解壓tar -xvf lua-resty-http-0.08.tar.gz

將這兩個檔案拷貝到我openresty安裝的lua的lib庫中,下圖是我openresty中nginx.conf配置檔案中制定的lua的支援模組的路徑,so

看到

把上面的http.lua,http_header.lua放到上圖中的resty資料夾中就可以了。

好了,準備工作ok.

**示例:

這個省事,直接呼叫了

local url = "http://ip:埠/......"

local resstr --響應結果

end--請求之後,狀態碼

ngx.status = res.status

if ngx.status ~= 200 then

ngx.log(ngx.warn,"非200狀態,ngx.status:"..ngx.status)

return resstr

end--header中的資訊遍歷,只是為了方便看頭部資訊打的日誌,用不到的話,可以不寫的

for key, val in pairs(res.headers) do

if type(val) == "table" then

ngx.log(ngx.warn,"table:"..key, ": ", table.concat(val, ", "))

else

ngx.log(ngx.warn,"one:"..key, ": ", val)

endend--響應的內容

resstr = res.body

ok,大功告成!

上面方式一說的獲取不到的header的資訊,採用的這個,這個怎麼獲取的就如上面的for迴圈,直接都列印出來了,我要用的是content-type,使用的方法是,接著上面的**繼續寫.....

--這個是我頁面上想要的格式

res = ''

ngx.log(ngx.warn,"osa--typeofcontent-yes-resstr="..res)

resstr = res

end(如果響應體content_type是image的話,為了防止內容被篡改,base64一下,再給頁面,頁面也是可以顯示出的,我一開始還在想讀流呢!哎,,)

好了 ,結束!

總結:

就上面的兩種方法,我覺的方式二相對好點,首先不用安裝,其次可以獲取響應的header的內容,也許方式一也可以,但是我沒搞出來。

~~~~~~~~純個人專案遇到的問題總結,如能幫上您,我很開心,如有錯誤或者不嚴謹的地方,還望指教!~~~

python 傳送http請求

測試用cgi,名字為test.py,放在apache的cgi bin目錄下 usr bin python import cgi def main print content type text html n form cgi.fieldstorage if form.has key servicec...

PHP 傳送HTTP請求

file get contents版本 傳送post請求 param string url 請求位址 param array post data post鍵值對資料 return string function send post url,post data 使用如下 post data array...

後台傳送Http請求

get方式傳送請求 建立http請求 指定請求型別 接收伺服器響應結果 post傳送請求 傳送請求 指定請求型別 將要post給伺服器的資料寫入請求建立的流中 接收伺服器響應結果 httpwebrequest不能直接通過new來建立,只能通過webrequest.create url 的方式來獲得。...