校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識(shí)庫 > Shell腳本實(shí)現(xiàn)的一個(gè)簡易Web服務(wù)器例子分享

Shell腳本實(shí)現(xiàn)的一個(gè)簡易Web服務(wù)器例子分享

熱門標(biāo)簽:excel地址地圖標(biāo)注 陜西電銷卡外呼系統(tǒng)怎么安裝 百度地圖標(biāo)注圖標(biāo)更換 佛山高德地圖標(biāo)注中心 東莞電銷機(jī)器人價(jià)格一覽表 旅游地圖標(biāo)注大全 百度地圖的地圖標(biāo)注 杭州機(jī)器人外呼系統(tǒng) 地圖標(biāo)注超出范圍怎么辦

假設(shè)你想測試網(wǎng)頁和一些CGI,而你又不想麻煩Apache安裝完整的包。這個(gè)快速的shell腳本可能只是你所需要的東西。

簡而言之,一個(gè)web服務(wù)器是一個(gè)應(yīng)用程序,該應(yīng)用程序?qū)⒈镜匚谋疚募ㄟ^網(wǎng)絡(luò)發(fā)送給客戶的請求。如果你讓另一個(gè)程序(例如inetd)處理網(wǎng)絡(luò)情況下,web服務(wù)器可以減少到只有 cat "文件名”發(fā)送到stdout。當(dāng)然,困難將提取部分文件名的HTTP請求字符串:任何一個(gè)Bash腳本無法輕易做到。

腳本

我們的腳本應(yīng)該像其他任何腳本一樣,加上一些定義:

復(fù)制代碼 代碼如下:

#!/bin/bash
base=/var/www

inetd將從遠(yuǎn)程主機(jī)接收到的數(shù)據(jù)傳遞給我們的腳本,第一行是標(biāo)準(zhǔn)的HTTP請求,后跟零個(gè)或更多的頭文件。我們記錄下請求,并退出休眠:
復(fù)制代碼 代碼如下:

read request

while /bin/true; do
  read header
  [ "$header" == $'\r' ] break;
done


最麻煩的部分:從請求的數(shù)據(jù)中提取URL并在本地文件中找到對應(yīng)文件:
復(fù)制代碼 代碼如下:

url="${request#GET }"
url="${url% HTTP/*}"
filename="$base$url"

返回含有頭部信息的文件內(nèi)容。
復(fù)制代碼 代碼如下:

if [ -f "$filename" ]; then
  echo -e "HTTP/1.1 200 OK\r"
  echo -e "Content-Type: `/usr/bin/file -bi \"$filename\"`\r"
  echo -e "\r"
  cat "$filename"
  echo -e "\r"
else
  echo -e "HTTP/1.1 404 Not Found\r"
  echo -e "Content-Type: text/html\r"
  echo -e "\r"
  echo -e "404 Not Found\r"
  echo -e "Not Found
           The requested resource was not found\r"
  echo -e "\r"
fi

好了,腳本完了。

安裝

為了使它工作,你必須添加以下行到/etc/inetd.conf文件:

復(fù)制代碼 代碼如下:

www stream tcp nowait nobody /usr/local/bin/webd webd

webd就是你剛剛創(chuàng)建的腳本名稱。

使用/etc/init.d/inetd restart使腳本生效后,就可以測試它了。在/var/www下放一些HTML文件,打開你最喜歡的Web瀏覽器的輸入以下地址測試:http://localhost/FILENAME.html

請注意,如果你的電腦連接這一個(gè)不安全的網(wǎng)絡(luò),這個(gè)腳本可能不算一個(gè)聰明的事,因?yàn)檎l都可以通過80端口訪問你硬盤上的文件。一個(gè)更好的辦法是使用 tcpd 來保證只允許本地連接。我會(huì)寫一些相關(guān)的信息,發(fā)揮你的想象力去干吧!

什么是CGI

就像這個(gè),WEB服務(wù)器是沒什么用處的,它什么都做不到,而且你可以用其他方法來訪問你的文件。我們需要CGI的支持(哪怕是很簡單的)。

理論:不通過網(wǎng)絡(luò)發(fā)送一個(gè)文本文件,我們運(yùn)行一個(gè)可執(zhí)行文件,并將其輸出。在這之前,我們已經(jīng)處理的HTTP請求的一步,建立一個(gè) QUERY_STRING變量輸出到可執(zhí)行文件。

要做到這樣,你只需要把第三步的代碼替換成這個(gè)樣子的就可以了。

復(fù)制代碼 代碼如下:

url="${request#GET }"
url="${url% HTTP/*}"
query="${url#*\&;}"
url="${url%%\&;*}"

filename="$base$url"

if [ "$query" != "$url" -a -x "$filename" ]; then
  export QUERY_STRING="$query"
  echo -e "HTTP/1.1 200 OK\r"
  "$filename"
  echo -e "\r"
  exit 0
fi

當(dāng)然,這個(gè)小玩意的性能無法與Apache相比,這只是一個(gè)小玩意。

標(biāo)簽:雅安 通遼 朝陽 南充 青島 隨州 延邊 西藏

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Shell腳本實(shí)現(xiàn)的一個(gè)簡易Web服務(wù)器例子分享》,本文關(guān)鍵詞  Shell,腳本,實(shí)現(xiàn),的,一個(gè),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Shell腳本實(shí)現(xiàn)的一個(gè)簡易Web服務(wù)器例子分享》相關(guān)的同類信息!
  • 本頁收集關(guān)于Shell腳本實(shí)現(xiàn)的一個(gè)簡易Web服務(wù)器例子分享的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 开封市| 贡觉县| 陆河县| 灵台县| 肃宁县| 龙山县| 青海省| 印江| 绥棱县| 新宁县| 康乐县| 昌黎县| 土默特右旗| 邯郸县| 合阳县| 玉山县| 平武县| 霍邱县| 富民县| 穆棱市| 方城县| 武山县| 湖南省| 和顺县| 闵行区| 莱芜市| 巨野县| 那坡县| 冷水江市| 利川市| 道孚县| 荥经县| 临沂市| 河津市| 齐齐哈尔市| 长阳| 三原县| 中卫市| 明星| 宝清县| 武鸣县|