在Web開(kāi)發(fā)中,數(shù)據(jù)的獲取很多時(shí)候都是通過(guò)提交表單來(lái)實(shí)現(xiàn),比如提交個(gè)人資料到數(shù)據(jù)庫(kù)等,是比較常見(jiàn)的一種交互方式,那在go語(yǔ)言里面怎么獲取,通過(guò)http包來(lái)實(shí)現(xiàn)。
http.Request里面的ParseForm()來(lái)解析表單
Web開(kāi)發(fā)很多年沒(méi)有用到了,如果你也同樣沒(méi)有服務(wù)器環(huán)境的話,跟著我快速搭一個(gè)Apache的服務(wù)環(huán)境,先下載:
https://www.apachelounge.com/download/
httpd-2.4.54-win64-VS17.zip
下載完之后,解壓即可,來(lái)到配置文件目錄,這個(gè)看你自己存放的地方,本人圖個(gè)簡(jiǎn)單直接放下載目錄了,如下:
C:\Users\Tony\Downloads\httpd-2.4.54-win64-VS17\Apache24\conf
httpd.conf
修改成安裝目錄
Define SRVROOT "C:\Users\Tony\Downloads\httpd-2.4.54-win64-VS17\Apache24"
ServerRoot "${SRVROOT}"
修改端口(避免80被占用,最好大點(diǎn)一般很少被占用,不超過(guò)65535即可)
Listen 8011
ServerName localhost:8011
然后用管理員命令行來(lái)到bin目錄:
C:\Users\Tony\Downloads\httpd-2.4.54-win64-VS17\Apache24\bin>httpd -k install
C:\Users\Tony\Downloads\httpd-2.4.54-win64-VS17\Apache24\bin>httpd -k start
然后重啟下
C:\Users\Tony\Downloads\httpd-2.4.54-win64-VS17\Apache24\bin>httpd -k restart
輸入:http://localhost:8011/ 即可顯示It works!這個(gè)頁(yè)面就是htdocs里的index.html
然后我們寫一個(gè)go程序來(lái)獲取其表單提交的內(nèi)容
test.go
package main
import (
"fmt"
"log"
"net/http"
)
func GetForm(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
for k, v := range r.Form {
fmt.Printf("鍵:%s,值:%s,%T\n", k, v, v)
}
fmt.Fprintf(w, "寅恪光潛")
}
func main() {
http.HandleFunc("/", GetForm)
err := http.ListenAndServe("localhost:55555", nil)
if err != nil {
log.Fatal(err)
}
}
go run test.go
執(zhí)行的時(shí)候發(fā)現(xiàn)報(bào)錯(cuò):
listen tcp 127.0.0.1:8011: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
exit status 1
為什么會(huì)被禁止訪問(wèn)呢,沒(méi)權(quán)限?于是使用了一些方法,關(guān)掉防火墻,沒(méi)用。
netstat -ano | findstr "8011"
查看端口是不是被其他程序使用
TCP ? ?0.0.0.0:8011 ? ? ? ? ? 0.0.0.0:0 ? ? ? ? ? ? ?LISTENING ? ? ? 4028
TCP ? ?[::]:8011 ? ? ? ? ? ? ?[::]:0 ? ? ? ? ? ? ? ? LISTENING ? ? ? 4028
好像也不是,這個(gè)就是上面我們弄的Apache服務(wù)開(kāi)的端口。
那是什么原因呢?網(wǎng)上有兩種答案,一個(gè)是Hyper-v的問(wèn)題,于是關(guān)閉它
dism.exe /online /disable-feature:microsoft-hyper-v
一樣報(bào)錯(cuò)
還有一種就是將一些端口排除開(kāi)來(lái),避免被使用,于是將8011開(kāi)始的10個(gè)端口號(hào)都排除,為連續(xù)的端口塊添加排除
netsh int ipv4 add excludedportrange protocol=tcp startport=8011 numberofports=10
標(biāo)記 ? ? ? ? ? ? ? ? 值
protocol ? ? ? - 為以下值之一:
?tcp: 為 TCP 添加排除。
?udp: 為 UDP 添加排除。
startport ? ? ?- 排除的起始端口號(hào)。
numberofports ?- 從排除的 startport 開(kāi)始的
?端口號(hào)。
store ? ? ? ? ?- 為以下值之一:
?active: 設(shè)置只持續(xù)到下一次啟動(dòng)。
?persistent: 更改持久有效。
?這是默認(rèn)值。
另一個(gè)程序正在使用此文件,進(jìn)程無(wú)法訪問(wèn)。
端口被使用了,這個(gè)時(shí)候我好像找到原因了,因?yàn)槲覔Q了端口,重啟Apache之后再來(lái)排除端口,那這個(gè)端口只能是Apache開(kāi)啟端口被占用。
思路對(duì)了之后,問(wèn)題就好解決了:
新開(kāi)一個(gè)端口55555,然后先不要打開(kāi)http://localhost:55555/這樣的服務(wù),不然端口被占用了。
先執(zhí)行g(shù)o語(yǔ)言程序,這樣就一直是監(jiān)聽(tīng)狀態(tài),然后打開(kāi)一個(gè)頁(yè)面,提交表單
get提交的話,也就是一個(gè)這樣的網(wǎng)址
http://localhost:55555/?NickName=Tony&Age=28&Hobby=Reading
這個(gè)時(shí)候我們就可以發(fā)現(xiàn)go程序獲取到了表單的數(shù)據(jù)了,Age修改成28,又接收到一次值:
C:\Users\Tony>go run test.go
鍵:Hobby,值:[Reading],[]string
鍵:NickName,值:[Tony],[]string
鍵:Age,值:[18],[]string
鍵:NickName,值:[Tony],[]string
鍵:Age,值:[28],[]string
鍵:Hobby,值:[Reading],[]string
當(dāng)然了,post提交同樣可以獲取,大家可以試下。
不過(guò)又出來(lái)一個(gè)新問(wèn)題,發(fā)現(xiàn)沒(méi)有執(zhí)行g(shù)o程序,打開(kāi)服務(wù)地址不可用了,這個(gè)又是一個(gè)奇怪問(wèn)題哈哈。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁(yè)標(biāo)題:Go語(yǔ)言解析表單form里提交的值以及錯(cuò)誤處理-創(chuàng)新互聯(lián)
分享路徑:http://www.rwnh.cn/article36/dcppsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、用戶體驗(yàn)、微信小程序、定制網(wǎng)站、動(dòng)態(tài)網(wǎng)站、軟件開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容