golang實戰 獲取web提交的資料

2021-09-26 15:56:50 字數 3932 閱讀 4098

背景

之前做 golang 開發的時候,用的是 beego 框架,框架的好處是,把所有工具都封裝好了,在獲取引數的時候,只要呼叫相應的方法,就能取得對應的資料。

而最近在從零開始,原生寫乙個**爬蟲管理的web服務功能時,發現自己所掌握的那點知識,並不能滿足自己的開發需求,測試好多遍都未果,希望寫下這篇記錄貼,供以後回顧。

資料提交場景大致如下:

1、表單提交,純粹的 form 表單提交資料;

2、表單上傳檔案,利用 form 表單上傳檔案;

3、ajax 提交 json 資料;

4、ajax 提交 表單資料;

5、ajax 上傳檔案;

下面我將對以上五種場景進行實際的示例展示,並採用 fetch api 代替 ajax 傳送請求。

示例示例1:html表單提交資料

action

=""method

="post"

>

type

="text"

name

="username"

placeholder

="username"

>

type

="text"

name

="password"

placeholder

="password"

>

type

="submit"

value

="submit"

>

form

>

r.parseform() // 首先解析表單

fmt.println("r.form : ", r.form)

fmt.println("r.form[\"username\"]", r.form["username"]) // 陣列索引方式獲取資料

fmt.println("r.form.get(\"password\")", r.form.get("password")) // get 方式獲取資料

r.form :  map[debug:[1] password:[testpass] username:[test]]

r.form["username"] [test]

r.form.get("password") testpass

示例2:html表單上傳檔案

fmt.println("r.form : ", r.form)

file, filehandler, _ := r.formfile("file")

fmt.println("file header : ", filehandler.header)

fmt.println("filename : ", filehandler.filename)

b, _ :=ioutil.readall(file) // 讀取檔案內容

fmt.println(string(b))

r.form :  map[debug:[1]]

filename : url.csv

示例3:ajax 提交json資料, golang 接收資料時,需要從request的body中,將資料讀出來

onclick

="test()"

>

testbutton

>

>

function

test()

),method:

"post"

, headers:})

.then

(response => response.

json()

).then

(data =>);

}script

>

json,_ := ioutil.readall(r.body)

fmt.println("got params: ", string(json))

fmt.println("echo request: ", r)

fmt.println("echo request header: ", r.header)

fmt.println("echo request body: ", r.body)

fmt.println("echo remote addr: ", r.remoteaddr)

fmt.println("echo host: ", r.host)

fmt.println("echo request method: ", r.method)

fmt.println("echo request ua: ", r.useragent())

got params:  

echo request body: & true false false 0x706ce0}

echo remote addr: 127.0.0.1:61679

echo host: 127.0.0.1:8088

echo request method: post

示例4:ajax 提交表單資料

onclick

="test()"

>

testbutton

>

>

function

test()

}).then

(response => response.

json()

).then

(data =>);

}script

>

r.parsemultipartform(32 << 20)

fmt.println(r.form)

fmt.println("username: ", r.form.get("username"))

fmt.println("password: ", r.form.get("password"))

map[debug:[1] password:[test_password] username:[test]]

username: test

password: test_password

示例5:ajax 上傳檔案

type

="file"

name

="test_file"

id="test_file"

>

onclick

="test()"

>

testbutton

>

>

function

test()

}).then

(response => response.

json()

).then

(data =>);

}script

>

r.parseform()

file, filehandle, _ := r.formfile("test_file")

fmt.println(filehandle.header, filehandle.filename, filehandle.size)

b, _ := ioutil.readall(file)

fmt.println(string(b))

fmt.println("password: ", r.form.get("password"))

password: test_password

WEB框架之Django 實戰專案資訊獲取

from django.contrib import admin from django.urls import path from blog import views urlpatterns path admin admin.site.urls path userinfo views.userin...

golang實戰小練習

統計 某路徑下 某些指定檔案中 指定字串出現的次數 用到的外部庫 allfiletextnum 統計 某路徑下 某些指定檔案中 指定字串出現的次數 dir string 指定查詢路徑 sixs string 指定查詢的字尾 text string 指定統計字串 return 指定字串出現的次數 in...

golang呼叫python實戰

go python python提供了豐富的c api。而c和go又可以通過cgo無縫整合。所以,直接通過golang呼叫libpython,就可以實現go調python的功能了。但是過程比較複雜,而go python提供了針對cpython 2的c api提供了native binding能力,方...