[Go]net/HTTP封包

小黑-avatar-img
發佈於後端
更新 發佈閱讀 8 分鐘

HTTP伺服器端

package main

import (
"net/http"
)

type Refer struct {
handler http.Handler
refer string
}

//實現中介軟體邏輯​
func (this *Refer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if r.Referer() == this.refer {
this.handler.ServeHTTP(w, r)
} else {
w.WriteHeader(403)
}
}

//事件處理​
func myHandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("this is handler"))
}

func hello(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("hello"))
}

func main() {
referer := &Refer{
handler: http.HandlerFunc(myHandler),//註冊路由
refer: "www.xxx.com",
}
http.HandleFunc("/hello", hello)//註冊路由
http.ListenAndServe(":8080", referer)//開啟監聽
}


HTTPS伺服器端

創建憑證

//在終端機輸入底下代碼
openssl req -newkey ras:2048 -nodes -keyout server.key -x509 -days 365 -out server.crt


package main

import (
"log"
"net/http"
)

func main() {
// 啟動伺服器
srv := &http.Server{Addr: ":8088", Handler: http.HandlerFunc(handle)}
// 用TLS啟動伺服器,因為我們執行的是http/2,它必須是與TLS一起運作。
log.Printf("Serving on https://0.0.0.0:8088")
log.Fatal(srv.ListenAndServeTLS("server.crt", "server.key"))
}

//處理器方法
func handle(w http.ResponseWriter, r *http.Request) {
// 記錄請求協定
log.Printf("Got connection: %s", r.Proto)
// 向客戶發送一則訊息
w.Write([]byte("Hello this is a HTTP/2 message!"))
}


用戶端

GET

package main

import (
"fmt"
"io/ioutil"
"net/http"
)

func main() {
resp, err := http.Get("https://www.xxx.com")
if err != nil {
fmt.Print("err", err)
}
closer := resp.Body
bytes, err := ioutil.ReadAll(closer)
fmt.Println(string(bytes))
}


DELETE

package main

import (
"fmt"
"io/ioutil"
"net/http"
"strings"
)

func main() {
url := "http://www.xxx.com/comment/add"
payload := strings.NewReader("{\"userId\":1,\"articleId\":1,\"comment\":\"xxxx\"}")
req, _ := http.NewRequest("DELETE", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

fmt.Println(res)
fmt.Println(string(body))
}


POST

package main

import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
)

func main() {
url := "http://www.xxx.com/comment/add"
body := "{\"userId\":1,\"articleId\":1,\"comment\":\"xxx\"}"
response, err := http.Post(url, "•application/x-www-form-urlencoded", bytes.NewBuffer([]byte(body)))
if err != nil {
fmt.Println("err", err)
}
b, err := ioutil.ReadAll(response.Body)
fmt.Println(string(b))
}


PUT

package main

import (
"fmt"
"io/ioutil"
"net/http"
"strings"
)

func main() {
url := "http://www.xxx.com/comment/add"
payload := strings.NewReader("{\"userId\":1,\"articleId\":1,\"comment\":\"xxx\"}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

fmt.Println(res)
fmt.Println(string(body))
}


自定義header

headers := http.Header{"token": {"46r6ttyfy67fy"}}
headers.Add("Accept-Charset", "UTF-8")
headers.Set("Host", "www.xxx.com")
headers.Set("Location", "www.xxx.com")
留言
avatar-img
留言分享你的想法!
avatar-img
小黑與程式的邂逅
8會員
123內容數
嗨,我是一名程式設計師,會在這分享開發與學習紀錄。
2024/06/05
GOB Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。 遠端存取的要求條件 方法的類型可輸出 方法的本體可輸出 方法必須要有兩個參數是輸出或內建 方法的第二個參數是指標型 方法的返回類型為
Thumbnail
2024/06/05
GOB Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。 遠端存取的要求條件 方法的類型可輸出 方法的本體可輸出 方法必須要有兩個參數是輸出或內建 方法的第二個參數是指標型 方法的返回類型為
Thumbnail
2024/06/04
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
2024/06/04
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
2024/06/03
Gorm是一款性能極好的ORM,且友善,因此可以明顯的提高開發效率。 特點 全功能ORM 支持連結 支援Hook 支持預先載入 支援交易 支持復合主鍵 支持SQL生成器 支援資料庫自動遷移 支援自訂日誌 可擴充性 所有功能都被測試覆蓋 安裝 go get -u gor
Thumbnail
2024/06/03
Gorm是一款性能極好的ORM,且友善,因此可以明顯的提高開發效率。 特點 全功能ORM 支持連結 支援Hook 支持預先載入 支援交易 支持復合主鍵 支持SQL生成器 支援資料庫自動遷移 支援自訂日誌 可擴充性 所有功能都被測試覆蓋 安裝 go get -u gor
Thumbnail
看更多
你可能也想看
Thumbnail
身為採購專家,當然不能錯過11/11購物節的超殺折扣!本文將帶你深入瞭解蝦皮11/11購物節的完整攻略,從必領的各種優惠券、商城折扣,到限時的搶購技巧,讓你買到手軟荷包也不哭泣。更重要的是,揭密蝦皮分潤計畫,教你如何零成本創業,透過分享商品連結,每月輕鬆加薪,開啟數位遊牧人生!
Thumbnail
身為採購專家,當然不能錯過11/11購物節的超殺折扣!本文將帶你深入瞭解蝦皮11/11購物節的完整攻略,從必領的各種優惠券、商城折扣,到限時的搶購技巧,讓你買到手軟荷包也不哭泣。更重要的是,揭密蝦皮分潤計畫,教你如何零成本創業,透過分享商品連結,每月輕鬆加薪,開啟數位遊牧人生!
Thumbnail
雙11購物節將近,這次分享一些蝦皮海外賣場購物的步驟與注意事項,並且介紹雙11蝦皮購物的相關優惠;另外蝦皮分潤計畫持續招募新血中,只要分享購物連結即可獲得分潤,是很適合創作者的額外收入管道喔!
Thumbnail
雙11購物節將近,這次分享一些蝦皮海外賣場購物的步驟與注意事項,並且介紹雙11蝦皮購物的相關優惠;另外蝦皮分潤計畫持續招募新血中,只要分享購物連結即可獲得分潤,是很適合創作者的額外收入管道喔!
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
gRPC是一款跨平台、高性能的RPC框架,他可以在任何環境下執行,主要用於後端為服務開發。在用戶端應用程式中,可以像本地物件那樣呼叫遠端伺服器的方法,因此可以創建出分散式應用。 使用 到https://github.com/protocolbuffers/protobuf/releases下
Thumbnail
gRPC是一款跨平台、高性能的RPC框架,他可以在任何環境下執行,主要用於後端為服務開發。在用戶端應用程式中,可以像本地物件那樣呼叫遠端伺服器的方法,因此可以創建出分散式應用。 使用 到https://github.com/protocolbuffers/protobuf/releases下
Thumbnail
Request內容 package main import ( "fmt" "log" "net/http" "strings" ) func request(w http.ResponseWriter, r *http.Request) { //這些資訊是輸出到伺服器端的列印訊息
Thumbnail
Request內容 package main import ( "fmt" "log" "net/http" "strings" ) func request(w http.ResponseWriter, r *http.Request) { //這些資訊是輸出到伺服器端的列印訊息
Thumbnail
Accept:用戶端能夠接收的內容類型。 Accept: text/plain, text/html Accept-Charset:瀏覽器可以接受的字元編碼集。 Accept-Charset: utf8 Accept-Encoding:指定瀏覽器可以支援的web伺服器返回內容壓縮編碼
Thumbnail
Accept:用戶端能夠接收的內容類型。 Accept: text/plain, text/html Accept-Charset:瀏覽器可以接受的字元編碼集。 Accept-Charset: utf8 Accept-Encoding:指定瀏覽器可以支援的web伺服器返回內容壓縮編碼
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News