5.8 کتابخانه http سمت کلاینت مقدماتی

5.8 کتابخانه http سمت کلاینت مقدماتی

برای ایجاد کلاینت http در گولنگ نیاز به کتابخانه net/http داریم. قبل از شروع به نوشتن کلاینت خود چند مفهوم کلی راه بررسی میکنیم.

5.8.1 سرور #

همانطور که میدانیم سرور های http برای تعریف مسیر ها منطق سرور و دریافت درخواست ها طراحی و ساخته میشوند. (در قسمت های قبل ایجاد سرور http بصورت کامل یادگرفتیم)

5.8.2 کلاینت #

کلاینت های در پروتوکول http برای صدا کردن (call) و ارسال درخواست به سرور ها طراحی و ساخته میشوند. در ادامه یک کلاینت مقدماتی و ساده را در زبان گولنگ ایجاد میکنیم.

‍‍

 1
 2package main
 3
 4import (
 5    "fmt"
 6    "io/ioutil"
 7    "net/http"
 8    "time"
 9)
10
11func main() {
12    // کلاینت خود را با استفاده از ماژول http ایجاد میکنیم
13    c := http.Client{Timeout: time.Duration(1) * time.Second}
14    // از طریق کلاینت ایجاد شده یک درخواست با متد GET به آدرس example.com ارسال میکنیم
15    // دقیقا سروری مشابه به سرور هایی که در قسمت های قبل ایجاد کردیم در آدرسی که الان به آن درخوایت ارسال میکنیم درحال گوش سپردن به درخواست ها میباشد.
16    resp, err := c.Get("https://www.example.com")
17    if err != nil {
18        fmt.Printf("Error %s", err)
19        return
20    }
21    defer resp.Body.Close()
22    // مقادیر دریافت شده از سرور را میخوانیم و چاپ میکنیم
23    body, err := ioutil.ReadAll(resp.Body)
24    fmt.Printf("Body : %s", body)
25}

در نهایت با اجرای قطعه کد بالا خروجی ما پاسخی است که از سرور دریافت کرده ایم:

 1Body : <!doctype html>
 2<html>
 3<head>
 4    <title>Example Domain</title>
 5
 6    <meta charset="utf-8" />
 7    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
 8    <meta name="viewport" content="width=device-width, initial-scale=1" />
 9    <style type="text/css">
10    body {
11        background-color: #f0f0f2;
12        margin: 0;
13        padding: 0;
14        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
15        
16    }
17    div {
18        width: 600px;
19        margin: 5em auto;
20        padding: 2em;
21        background-color: #fdfdff;
22        border-radius: 0.5em;
23        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
24    }
25    a:link, a:visited {
26        color: #38488f;
27        text-decoration: none;
28    }
29    @media (max-width: 700px) {
30        div {
31            margin: 0 auto;
32            width: auto;
33        }
34    }
35    </style>    
36</head>
37
38<body>
39<div>
40    <h1>Example Domain</h1>
41    <p>This domain is for use in illustrative examples in documents. You may use this
42    domain in literature without prior coordination or asking for permission.</p>
43    <p><a href="https://www.iana.org/domains/example">More information...</a></p>
44</div>
45</body>
46</html>