Задать вопрос
rusbaron
@rusbaron
Не стыдно не знать, стыдно не интересоваться

Как отправить get запрос с параметром на русском языке?

package geogo

import (
	"context"
	"fmt"
	"io/ioutil"
	"net/http"
	"strings"
	//"time"
	"errors"
)

// DefaultTimeout for the request execution
//const DefaultTimeout = time.Second * 8

// ErrTimeout occurs when no response returned within timeoutInSeconds
var ErrTimeout = errors.New("TIMEOUT")

type EndpointBuilder interface {
	GeocodeURL(string) string
}

type HTTPGeocoder struct {
	EndpointBuilder
}

func Response(ctx context.Context, url string) error {
	req, err := http.NewRequest(http.MethodGet, url, nil)
	if err != nil {
		return err
	}
	req = req.WithContext(ctx)

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		return err
	}

	defer resp.Body.Close()
	data, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return err
	}

	body := strings.Trim(string(data), " []")

	fmt.Println(url)
	fmt.Println(body)

	if body == "" {
		return nil
	}

	return nil
}


package main

import(
	"context"
	"time"
	"fmt"
	"geogo/geogo"
)

const DefaultTimeout = time.Second * 360


const mapquestAPIKey string = "key"
const searchValue string = "Курган"
const mapquestRequestString string = "https://www.mapquestapi.com/geocoding/v1/address?key="+mapquestAPIKey+"&inFormat=kvp&outFormat=json&location="+searchValue+"&thumbMaps=false" //mapquest string


//Mapquest - проблема с русским языком

func main(){
	ctx, cancel := context.WithTimeout(context.TODO(), DefaultTimeout)
	defer cancel()
	err := geogo.Response(ctx, mapquestRequestString)
	fmt.Println(err)
}


2 файлика, пытаюсь получить данные с mapbox.
В результате сформировывается строка запроса:

https://www.mapquestapi.com/geocoding/v1/address?k...

если её скопировать и выполнить в браузере,получу около 5 точек,где location будет "Курган"
При выполнении go кода, получаю 1 точку,с локацией:

location":"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"

На сколько я понимаю, проблема в кодировке, причём при отправлении запроса, т.к. из браузера всё выполняется на ура.Подскажите,куда рыть?Как это исправить?

Примерно по такой же схеме если отправить запрос к api гугла, я получу нужный мне ответ.
  • Вопрос задан
  • 822 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
alfss
@alfss
https://career.habr.com/alfss
URLEncoder.encode(q, "UTF-8");
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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