新聞中心
Go 代碼中如何綁定 Host?本篇重點(diǎn)為大家講解一下Go 代碼綁定 Host具體方法, 有需要的小伙伴可以參考一下。

為澄城等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及澄城網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、澄城網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
本文示例:
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)
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host:studygolang.com'));
curl_setopt($ch, CURLOPT_URL, 'http://192.168.1.102/testhost.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$ret = curl_exec($ch);
var_dump($ret);
2)不依賴 curl 擴(kuò)展的方式
// Create a stream
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Host:studygolang.com"
)
);
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$ret = file_get_contents('http://192.168.1.102/testhost.txt', false, $context);
var_dump($ret);
3、Golang 的解決方案
由于 Go 標(biāo)準(zhǔn)庫實(shí)現(xiàn)了 http 協(xié)議,在 net/http 包中尋找解決方案。
一般的,請求一個(gè) url,我們通過以下代碼實(shí)現(xiàn):
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 的值。方法如下:
package main
import (
"net/http"
"io/ioutil"
"fmt"
)
func main() {
req, err := http.NewRequest("GET", "http://192.168.1.102/testhost.txt", nil)
if err != nil {
panic(err)
}
req.Host = "studygolang.com"
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(body))
}
4、總結(jié)
不管是什么方式、什么語言,歸根結(jié)底,需要告知服務(wù)器請求的是哪個(gè) Host,這個(gè)是 HTTP 協(xié)議的 Host 頭。如果不手動(dòng)設(shè)置 Host 頭,則會(huì)從請求的 url 中獲取。
網(wǎng)頁題目:Go代碼中如何綁定Host
鏈接地址:http://www.dlmjj.cn/article/dhdoepo.html


咨詢
建站咨詢
