GUI (Grafiksel Kullanıcı Arayüzü)
HTTP İstekleri (Requests)
Bu bölümde bir web sayfasına nasıl istekte bulunacağımızı göreceğiz.

Get İsteği

Standart istektir.
1
package main
2
3
import (
4
"fmt"
5
"io"
6
"net/http"
7
)
8
9
func main() {
10
//Google anasayfasına GET isteğinde bulunalım
11
//ve dönen cevabı cevap değişkenine atayalım
12
cevap, hata := http.Get("https://www.google.com.tr")
13
if hata != nil {
14
//Ya sev ya terket dedik ve paniği bastık.
15
panic(hata)
16
}
17
//Body'i kapatmayı unutmayalım
18
defer cevap.Body.Close()
19
20
//Bu esnada Body'den cevabı çekip sayfa değişkenine alıyoruz.
21
//Çünkü bunu yapmadan okunabilir bir sonuç alamayız.
22
sayfa, hata := io.ReadAll(cevap.Body)
23
24
if hata != nil {
25
panic(hata)
26
}
27
28
//sayfa değişkeni byte dizisi tipinde olduğu için
29
//string tipine cevirip okuyalım
30
fmt.Println(string(sayfa))
31
32
//Çıktımız Google TR anasayfasının kaynak kodları olacaktır.
33
}
Copied!

Sorgu Parametresi Ekleme

Örneğin, yaptığımız istekte search?q=golang&hl=de gibi bir sorgu kısmı olmasını istiyoruz. URL'yi girdiğimiz kısmı bunu el ile ekleyebiliriz tabiki. Ama onunda kolay bir yöntemi var. Bunun için net/url paketini içe aktaralım. Hemen görelim.
1
func main() {
2
params := url.Values{
3
"q": {"golang"}, //aranacak metin
4
"hl": {"tr"}, //örnek olarak Türkçe sonuç vermesi için
5
}
6
fmt.Println("https://www.google.com.tr/search?" + params.Encode())
7
}
Copied!
Çıktımız: https://www.google.com.tr/search?q=golang&hl=tr olacaktır.
Bu örneği de aşağıdaki gibi kullanabilirsiniz.
1
package main
2
import (
3
"fmt"
4
"io"
5
"net/http"
6
"net/url"
7
)
8
9
func main() {
10
params := url.Values{
11
"q": {"golang"},
12
"hl": {"tr"},
13
}
14
15
//URL'imizi aşağıdaki gibi yazalım.
16
cevap, hata := http.Get("https://www.google.com.tr/search?" + params.Encode())
17
if hata != nil {
18
panic(hata)
19
}
20
defer cevap.Body.Close()
21
22
sayfa, hata := io.ReadAll(cevap.Body)
23
24
if hata != nil {
25
panic(hata)
26
}
27
28
fmt.Println(string(sayfa))
29
30
}
Copied!

Postform İsteği

1
package main
2
3
import (
4
"fmt"
5
"io"
6
"net/http"
7
"net/url"
8
)
9
10
func main() {
11
//URL'e gönderilecek verileri oluşturalım.
12
değerler := url.Values{
13
"isim": {"Kaan"},
14
"soyisim": {"Kuşcu"},
15
}
16
17
//değerler.Encode() yapmadan direkt değerler şekline gönderiyoruz
18
//çünkü göndereceğimiz bir url parametresi değildir.
19
cevap, hata := http.PostForm("https://orneksite.com/kisiler", değerler)
20
21
//Ya sev ya terket
22
if hata != nil {
23
panic(hata)
24
}
25
//Body'i kapatmayı unutmuyoruz.
26
defer cevap.Body.Close()
27
28
//Body'den gelen veriyi okuyoruz.
29
sonuç, hata := io.ReadAll(cevap.Body)
30
31
//Ya sev...
32
if hata != nil {
33
panic(hata)
34
}
35
36
//İnsanlar byte dizisini okuyamadığı için
37
//string tipine çeviriyoruz.
38
fmt.Println(string(sonuç))
39
}
Copied!

Post İsteği

Post isteğini yaparken örnek bir json verisi göndermeyi görelim.
1
package main
2
3
import (
4
"bytes"
5
"encoding/json"
6
"fmt"
7
"io"
8
"net/http"
9
)
10
11
func main() {
12
address := "https://orneksite.com/kisiler"
13
hamVeri := map[string]string{
14
"isim": "Kaan",
15
"soyisim": "Kuşcu",
16
}
17
jsonVeri, hata := json.Marshal(hamVeri)
18
//jsonVeri string tipine çevirildiğinde:
19
//{"isim":"Kaan","soyisim":"Kuşcu"}
20
21
if hata != nil {
22
panic(hata)
23
}
24
25
//Aşağıdaki gönderdiğimiz verinin json tipinde olduğunu bildiriyoruz.
26
sorgu, hata := http.Post(address, "application/json", bytes.NewBuffer(jsonVeri))
27
if hata != nil {
28
panic(hata)
29
}
30
31
//sonucu sonuç değişkenine atayalım
32
sonuç, hata := io.ReadAll(sorgu.Body)
33
if hata != nil {
34
panic(hata)
35
}
36
37
//Son olarak ekrana bastıralım.
38
fmt.Println(string(sonuç))
39
}
Copied!
Yukarıdaki örnekte json verimizi map ile oluşturarak post isteğinde kullandık. Map ile oluşturduğumuz json verisi esnek olmadığı için, yani yukarıdaki örnekte sadece string tipinde veri oluşturabildiğimiz için, bir de struct ile oluşturmayı görelim. Anonim bir struct oluşturup işimizi görebiliriz.
1
package main
2
3
import (
4
"bytes"
5
"encoding/json"
6
"fmt"
7
"io"
8
"net/http"
9
)
10
11
func main() {
12
address := "https://orneksite.com/kisiler"
13
14
//struct içindeki değişken isimlerini büyük harfle
15
//yazmazsak json'a çevirirken hata alırız.
16
structVeri := struct {
17
İsim string `json:"isim"` //json'da isim olacak
18
Soyisim string `json:"soyisim"` //json'da soyisim olacak
19
Yaş int `json:"yas"` //json'da yas olacak
20
}{"Kaan", "Kuşcu", 23}
21
22
//struct'ımızı json'a çevirelim.
23
jsonVeri, hata := json.Marshal(structVeri)
24
//jsonVeri string tipine çevirildiğinde:
25
//{"isim":"Kaan","soyisim":"Kuşcu","yas":23}
26
27
if hata != nil {
28
panic(hata)
29
}
30
31
//Aşağıdaki gönderdiğimiz verinin json tipinde olduğunu bildiriyoruz.
32
sorgu, hata := http.Post(address, "application/json", bytes.NewBuffer(jsonVeri))
33
if hata != nil {
34
panic(hata)
35
}
36
37
//sonucu sonuç değişkenine atayalım
38
sonuç, hata := io.ReadAll(sorgu.Body)
39
if hata != nil {
40
panic(hata)
41
}
42
43
//Son olarak ekrana bastıralım.
44
fmt.Println(string(sonuç))
45
}
Copied!
Last modified 8mo ago