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 гугла, я получу нужный мне ответ.