[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
8會員
123內容數
嗨,我是一名程式設計師,會在這分享開發與學習紀錄。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
2024年底,回顧了過去兩年。 那天在山上跟竹說:不知道為什麼,我覺得這兩年對我來說是生命的一格刻度。 2023、2024這兩年發生了很多事,大三大四對很多人來說都是轉變的時間點,我也不例外。和小時候比起來,更多陌生未知的痛苦,但也有更多不可計量的快樂體驗。擁有更多更多的朋友,卻比過去知道如何與
Google與Anthropic合作,將Claude模型應用於Gemini AI,以提升其性能和安全性,這一行為引發了業界對商業倫理、競爭公平性及知識產權的激烈討論。未來,如何平衡創新與監管將是行業發展的重要議題。
跟著意志與心之所向行事,向來都是困難的。會考慮太多世俗的眼光,旁人的意見,所以保持安靜是必要的。不需要向其他人解釋與說明,自己想要達成的事,只需要自己努力便是。安靜地看著,用著力氣做著自己的事就好。有許多事,不需要明白地說明,因為能懂的只有自己。工作,家人,情人,都好。彷彿只有自己的時候,才能想透徹
Thumbnail
探索由小芝風花主演的感人日劇《GO HOME 警視廳身份不明者諮詢室》,溫情推理揭開死者身份之謎,每集都是一次觸動人心的旅程。
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
2024年底,回顧了過去兩年。 那天在山上跟竹說:不知道為什麼,我覺得這兩年對我來說是生命的一格刻度。 2023、2024這兩年發生了很多事,大三大四對很多人來說都是轉變的時間點,我也不例外。和小時候比起來,更多陌生未知的痛苦,但也有更多不可計量的快樂體驗。擁有更多更多的朋友,卻比過去知道如何與
Google與Anthropic合作,將Claude模型應用於Gemini AI,以提升其性能和安全性,這一行為引發了業界對商業倫理、競爭公平性及知識產權的激烈討論。未來,如何平衡創新與監管將是行業發展的重要議題。
跟著意志與心之所向行事,向來都是困難的。會考慮太多世俗的眼光,旁人的意見,所以保持安靜是必要的。不需要向其他人解釋與說明,自己想要達成的事,只需要自己努力便是。安靜地看著,用著力氣做著自己的事就好。有許多事,不需要明白地說明,因為能懂的只有自己。工作,家人,情人,都好。彷彿只有自己的時候,才能想透徹
Thumbnail
探索由小芝風花主演的感人日劇《GO HOME 警視廳身份不明者諮詢室》,溫情推理揭開死者身份之謎,每集都是一次觸動人心的旅程。
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過