日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
在Go代碼中如何綁定Host?

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

公司主營業(yè)務(wù):網(wǎng)站建設(shè)、成都做網(wǎng)站、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出唐河免費(fèi)做網(wǎng)站回饋大家。

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

本文示例:

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

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

1、Linux Shell 的解決方案

Linux 下的 curl 程序可以綁定 host,因此,在 shell 中可以很簡單的實(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. $context = stream_context_create($opts);
  9. // Open the file using the HTTP headers set above
  10. $ret = file_get_contents('http://192.168.1.102/testhost.txt', false, $context);
  11. var_dump($ret);

3、Golang 的解決方案

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

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

 
 
 
  1. http.Get(url)

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

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

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

4、總結(jié)

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


分享名稱:在Go代碼中如何綁定Host?
標(biāo)題來源:http://www.dlmjj.cn/article/dpgiess.html