Golang получить данные об ошибке с ключевым словом Unicode - PullRequest
1 голос
/ 20 марта 2020

У меня есть функция для вызова API Twitter. Если вход содержит ключевое слово с не-ascii символом (q=éxito), API отвечает: 401:

https://api.twitter.com/1.1/search/tweets.json?q=éxito&count=100&result_type=recent&include_entities=true

, но с символами all-ascii в URL, отвечает ж / ОК:

https://api.twitter.com/1.1/search/tweets.json?q=teampixel&count=100&result_type=recent&include_entities=true

func GetJson(url string, target interface{}) error {
    e := godotenv.Load()
    if e != nil {
        fmt.Print(e)
    }
    println(url)
    config := oauth1.NewConfig(os.Getenv("API_KEY"), os.Getenv("API_SECRET_KEY"))
    token := oauth1.NewToken(os.Getenv("ACCESS_TOKEN"), os.Getenv("ACCESS_TOKEN_SECRET"))
    // httpClient will automatically authorize http.Request's
    httpClient := config.Client(oauth1.NoContext, token)

    resp, e := httpClient.Get(url)
    const errorDelay = 30
    if e != nil {
        fmt.Println("Connection Issue")
        time.Sleep(errorDelay * time.Second)
        return GetJson(url, target)
    }
    defer resp.Body.Close()
    if resp.StatusCode == 429 {
        fmt.Println("\nThrotteling")
        time.Sleep(errorDelay * time.Second)
        return GetJson(url, target)
    }

    if resp.StatusCode == 404 {
        fmt.Println("Could not find", url)
        return errors.New("not found")
    }
    fmt.Printf("Results: %v\n", resp.StatusCode)

    return json.NewDecoder(resp.Body).Decode(target)
}

1 Ответ

0 голосов
/ 07 апреля 2020

Использование url.Parse():

package main

import (
    "fmt"
    "log"
    "net/url"
)

func main() {
    _url := "https://abbreviated-path?q=%C3%A9xito&count=..."
    u, err := url.Parse(_url)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(u.String())
}

, кажется, решает проблему:

https://abbreviated-path?q=%C3%A9xito&count=...
...