成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在 Go 代碼中如何綁定 Host?

開發(fā) 后端
在公司內(nèi)部,為了安全,可能會(huì)有域名是需要綁定 host 才能訪問的,如果是通過瀏覽器訪問,我們會(huì)修改本機(jī)的 hosts 文件;然而,如果是要通過程序訪問這樣的域名,我們是否依然必須綁定 host 呢?

[[423284]]

在公司內(nèi)部,為了安全,可能會(huì)有域名是需要綁定 host 才能訪問的,如果是通過瀏覽器訪問,我們會(huì)修改本機(jī)的 hosts 文件;然而,如果是要通過程序訪問這樣的域名,我們是否依然必須綁定 host 呢?答案當(dāng)然是否定的,而且,依賴本地綁定的 host,程序到其他機(jī)器部署,也必須在那臺(tái)機(jī)器綁定 host,如果機(jī)器很多呢?

剛好前兩天,群里也有人問類似的問題

本文示例:

  • IP:192.168.1.102,也就是說(shuō)需要訪問這臺(tái)機(jī)器上的資源
  • 域名:studygolang.com,nginx 配置的虛擬主機(jī)
  • url path:/testhost.txt,內(nèi)容是:Welcome to studygolang.com

需求:需要請(qǐng)求服務(wù)器上的 testhost.txt 資源。

1、Linux Shell 的解決方案

Linux 下的 curl 程序可以綁定 host,因此,在 shell 中可以很簡(jiǎn)單的實(shí)現(xiàn),如:curl -H "Host:studygolang.com" http://192.168.1.102/testhost.txt。

2、PHP 的解決方案

1)通過 curl 擴(kuò)展實(shí)現(xiàn)

  1. $ch = curl_init(); 
  2. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host:studygolang.com')); 
  3. curl_setopt($ch, CURLOPT_URL, 'http://192.168.1.102/testhost.txt'); 
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  5. $ret = curl_exec($ch); 
  6. var_dump($ret); 

2)不依賴 curl 擴(kuò)展的方式

  1. // Create a stream 
  2. $opts = array( 
  3.     'http'=>array( 
  4.         'method'=>"GET"
  5.         'header'=>"Host:studygolang.com" 
  6.     ) 
  7. ); 
  8.  
  9. $context = stream_context_create($opts); 
  10.  
  11. // Open the file using the HTTP headers set above 
  12. $ret = file_get_contents('http://192.168.1.102/testhost.txt'false, $context); 
  13. var_dump($ret); 

3、Golang 的解決方案

由于 Go 標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)了 http 協(xié)議,在 net/http 包中尋找解決方案。

一般的,請(qǐng)求一個(gè) url,我們通過以下代碼實(shí)現(xiàn):

  1. http.Get(url) 

然而,針對(duì)本文說(shuō)到的這種情況,無(wú)論 url = "http://192.168.1.102/testhost.txt" 還是 url = "http://studygolang.com/testhost.txt",都無(wú)法請(qǐng)求到資源(沒有綁定 host 的情況)。

在 http 包中的 Request 結(jié)構(gòu)中,有一個(gè)字段:Host,我們可以參考上面兩種解決方案,設(shè)置 Host 的值。方法如下:

  1. package main 
  2.  
  3. import ( 
  4.     "net/http" 
  5.     "io/ioutil" 
  6.     "fmt" 
  7.  
  8. func main() { 
  9.     req, err := http.NewRequest("GET""http://192.168.1.102/testhost.txt", nil) 
  10.     if err != nil { 
  11.         panic(err) 
  12.     } 
  13.     req.Host = "studygolang.com" 
  14.     resp, err := http.DefaultClient.Do(req) 
  15.     if err != nil { 
  16.         panic(err) 
  17.     } 
  18.     defer resp.Body.Close() 
  19.     body, err := ioutil.ReadAll(resp.Body) 
  20.     if err != nil { 
  21.         panic(err) 
  22.     } 
  23.     fmt.Println(string(body)) 

4、總結(jié)

 

不管是什么方式、什么語(yǔ)言,歸根結(jié)底,需要告知服務(wù)器請(qǐng)求的是哪個(gè) Host,這個(gè)是 HTTP 協(xié)議的 Host 頭。如果不手動(dòng)設(shè)置 Host 頭,則會(huì)從請(qǐng)求的 url 中獲取。

 

責(zé)任編輯:武曉燕 來(lái)源: polarisxu
相關(guān)推薦

2024-03-19 14:15:48

Go程序os.Exit()

2010-07-30 10:37:23

Flex數(shù)據(jù)綁定

2023-12-21 07:06:32

Go編寫HTML

2020-08-20 08:23:52

VueDOM運(yùn)算符

2011-05-30 17:31:51

Android 模擬SD卡

2021-11-02 11:31:47

Go代碼模式

2025-02-12 11:06:24

Go函數(shù)MultiBytes

2020-06-28 08:10:00

GoGOSSAFUNC圖編程語(yǔ)言

2025-06-04 08:40:00

Go語(yǔ)言鏈表

2021-07-09 12:37:31

GoPython編程語(yǔ)言

2021-06-09 07:15:20

Go枚舉技巧

2009-12-24 16:57:53

WPF密碼

2014-04-09 09:32:24

Go并發(fā)

2021-11-10 15:18:16

JavaGo命令

2023-12-13 07:19:01

微服務(wù)架構(gòu)Golang

2023-11-02 10:32:27

GoGORM

2021-09-26 06:43:09

TCP連接Go

2016-10-11 20:33:17

JavaScriptThisWeb

2024-02-19 07:40:10

2009-07-22 08:52:05

Scala動(dòng)態(tài)綁定
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩av一区二区在线观看 | 欧美精品1区2区3区 精品国产欧美一区二区 | 亚洲午夜视频在线观看 | 91视视频在线观看入口直接观看 | 日本不卡一二三 | av中文字幕在线观看 | 天天弄天天操 | 精品美女视频在线观看免费软件 | 在线精品亚洲欧美日韩国产 | 亚洲人成在线播放 | 成年网站在线观看 | 成人二区 | 久久精品国产一区二区三区不卡 | 电影午夜精品一区二区三区 | 国产一级在线 | 黄色大片网站 | 久久一级 | 久久久久国产精品一区二区 | 在线日韩中文字幕 | 亚洲欧美中文日韩在线v日本 | 91新视频| 91麻豆蜜桃一区二区三区 | 精品国产三级 | 欧美精品在线免费观看 | aaa精品| 日韩aⅴ视频 | www.天天操| 热re99久久精品国99热观看 | 色综合网站 | 97超碰在线免费 | 国产免费福利在线 | 国产中文字幕网 | 国产精品视频一二三区 | 精品网 | 国产视频第一页 | 精品视频一区二区 | 亚洲国产成人精品女人久久久 | 亚洲免费网址 | 久久精品二区亚洲w码 | 欧美精品二区 | 国产精品99久久久久久动医院 |