برای ایجاد کلاینت http در گولنگ نیاز به کتابخانه net/http
داریم.
قبل از شروع به نوشتن کلاینت خود چند مفهوم کلی راه بررسی میکنیم.
5.8.1 سرور #
همانطور که میدانیم سرور های http برای تعریف مسیر ها منطق سرور و دریافت درخواست ها طراحی و ساخته میشوند. (در قسمت های قبل ایجاد سرور http بصورت کامل یادگرفتیم)
5.8.2 کلاینت #
کلاینت های در پروتوکول http برای صدا کردن (call) و ارسال درخواست به سرور ها طراحی و ساخته میشوند. در ادامه یک کلاینت مقدماتی و ساده را در زبان گولنگ ایجاد میکنیم.
package main
import (
"fmt"
"io/ioutil"
"net/http"
"time"
)
func main() {
// کلاینت خود را با استفاده از ماژول http ایجاد میکنیم
c := http.Client{Timeout: time.Duration(1) * time.Second}
// از طریق کلاینت ایجاد شده یک درخواست با متد GET به آدرس example.com ارسال میکنیم
// دقیقا سروری مشابه به سرور هایی که در قسمت های قبل ایجاد کردیم در آدرسی که الان به آن درخوایت ارسال میکنیم درحال گوش سپردن به درخواست ها میباشد.
resp, err := c.Get("https://www.example.com")
if err != nil {
fmt.Printf("Error %s", err)
return
}
defer resp.Body.Close()
// مقادیر دریافت شده از سرور را میخوانیم و چاپ میکنیم
body, err := ioutil.ReadAll(resp.Body)
fmt.Printf("Body : %s", body)
}
در نهایت با اجرای قطعه کد بالا خروجی ما پاسخی است که از سرور دریافت کرده ایم:
Body : <!doctype html>
<html>
<head>
<title>Example Domain</title>
<meta charset="utf-8" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">
body {
background-color: #f0f0f2;
margin: 0;
padding: 0;
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
}
div {
width: 600px;
margin: 5em auto;
padding: 2em;
background-color: #fdfdff;
border-radius: 0.5em;
box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
}
a:link, a:visited {
color: #38488f;
text-decoration: none;
}
@media (max-width: 700px) {
div {
margin: 0 auto;
width: auto;
}
}
</style>
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents. You may use this
domain in literature without prior coordination or asking for permission.</p>
<p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>