semennovikov123
@semennovikov123
Backend Developer

Как переписать код запроса с python 2 на golang?

Никак не получается переписать этот код на golang. Исходный код:
# -*- coding: utf-8 -*-
import urllib
import json
data['param1'] = '1'
data['param2'] = '2'
params = {}
params['access_token'] = '3e17b2be0282a44'
params['data'] = json.dumps(data)
params = urllib.urlencode(params)
f = urllib.urlopen("http://pbrf.ru/pdf.F7", params)
print f.read()

Попытка 1:
func Main() {
	req, err := http.NewRequest("GET", "http://pbrf.ru/pdf.F7", nil)
	if err != nil {
		log.Print(err)
		os.Exit(1)
	}

	q := req.URL.Query()
	addKeyAndValue(&q, Init2())
	req.URL.RawQuery = q.Encode()
	fmt.Println(req.URL.String())

	client := &http.Client{}
	req.Header.Add("Content-Type","application/x-www-form-urlencoded")
	resp, err := client.Do(req)
	checkErr(err);
	defer resp.Body.Close()
	resp_body, _ := ioutil.ReadAll(resp.Body)

	fmt.Println(resp.Status)
	fmt.Println(string(resp_body))
}

func addKeyAndValue(query *url.Values, parameters map[string]string) {
	for key, value := range parameters {
		query.Add(key, value)
	}
	return
}

Попытка 2:
func NewBlank() {

	type Request struct {
		Access_token string `json:"access_token"`
		Data  map[string]string `json:"data"`
	}

	u := Request{ "3e17b2be0282a44505",Init()}
	req, err := json.Marshal(u)
	checkErr(err)
	body := bytes.NewReader(req)
		fmt.Println(string(req))

	res, err := http.Post("http://pbrf.ru/pdf.F7", "application/json; charset=utf-8", body)
	checkErr(err)		

	bod, err := ioutil.ReadAll(res.Body)
	checkErr(err)

	msg := gjson.Get(string(bod), "message").String()
	println(msg)
}
  • Вопрос задан
  • 378 просмотров
Решения вопроса 1
@tush_it
Запрос должен быть POST.
Headers - application/x-www-form-urlencoded
Проверить, что реально отправляется можно заменив адрес на https://httpbin.org/post

Пример на Go ниже

func Init() string {
	res := make(map[string]string)
	res["param1"] = "1"
	res["param2"] = "2"
	data, err := json.Marshal(res)
	checkErr(err)
	return string(data)
}

func NewBlank() {
	address := "http://pbrf.ru/pdf.F7"
	fmt.Println("URL:>", address)

	payload := url.Values{"access_token": []string{"3e17b2be0282a44505"}, "data": []string{Init()}}
	req, err := http.NewRequest("POST", address, bytes.NewBuffer([]byte(payload.Encode())))
	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

	client := &http.Client{}
	resp, err := client.Do(req)
	checkErr(err)
	defer resp.Body.Close()

	fmt.Println("response Status:", resp.Status)
	fmt.Println("response Headers:", resp.Header)
	body, _ := ioutil.ReadAll(resp.Body)
	fmt.Println("response Body:", string(body))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы