Go言語でGETをGoogleのサーバに送って、
返ってきたレスポンスを表示させましょう。
Go言語でソケットプログラミングを
やってみたいと思った方は、
是非参考にして下さい。
まずは、実行結果とプログラムです。
ソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package main import "net" import "fmt" import "bufio" func main(){ /*接続を試みる*/ conn, err := net.Dial("tcp", "www.google.com:80") if err != nil { fmt.Println("Error") } /*GETリクエストを送信*/ fmt.Fprintf(conn, "GET / HTTP/2.0¥r¥n¥r¥n") /*バッファにある返信データをすべて表示*/ buff := make([]byte, 2048)//ある程度のサイズ res, err := bufio.NewReader(conn).Read(buff) fmt.Printf("%s", buff[:res]) } |
実行結果

上から順番に、
ステータスライン
リスポンスヘッダー
メッセージボディ
HTTPリスポンスがしっかりと表示されていますね。
Go言語でGETリクエストを送る方法
ソースの構造はC++と似ています。
サーバに接続して送信データに、
「GET / HTTP/2.0」
と指定するだけです。
実行環境はwindowsですので、
CR, LFの付け忘れにも注意です。
あとは受信データを読み込んで、
printfで標準出力するだけです。
それでは上から順番に解説します。
Dial関数を使うためにnetを
printf系の関数を使うためにfmt
read系の関数を使うためにbufioを
それぞれインポートします。
func Dial(network, address string) (Conn, error) |
---|
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) |
func Printf(format string, a ...interface{}) (n int, err error) |
func NewReader(rd io.Reader) *Reader |
func (b *Reader) Read(p []byte) (n int, err error) |
【Dial関数】
TCPかUDPプロトコルと、
接続先ホストを指定します。
プロトコルの指定には、
TCP、TCP4(IPv4のみ)、TCP6(IPv6のみ)
UDP、UDP4(IPv4のみ)、TCP6(IPv6のみ)
が選択肢としてあります。
ホストの指定には、
FQDNもしくはIPアドレス、
併せてポート番号も一緒に指定します。
【NewReader関数】
Dial関数の戻り値をconnという名前の
Conn型変数に入れています。
変数の名前と変数の型名が
同じ名前なので気を付けて下さい。
データを読み込むために
Read関数を使いますが、
Conn型のままでは使えないので、
Read型に変換させます。(イメージ)
NewReaderはそのための関数です。
【Readメソッド】
Read型変数に対して使います。
仮引数にByte型配列を使うので、
適当なサイズのByte型を作成します。
読み込んだ内容は配列に入れ、
格納したバイト数を返します。
関数の簡易的な説明は以上です。
なお受信データの読み込みは、
一行(ステータスライン)だけにしたい場合は、
Readメソッドではなく、
ReadStringメソッドを使います。
最後まで読んでいただきありがとうございました。
【参考文献】
・https://golang.org/pkg/net/
・https://golang.org/pkg/bufio/
・https://golang.org/pkg/fmt/