Golang url.Parse всегда возвращает неверный URL контрольного символа - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь очистить какой-то сайт с помощью прокси-сервера, полученного с free-proxy-list.net, и применить его в своем локальном http-запросе с использованием Golang, но когда я анализирую прокси-сервер с помощью url.Parse () всегда возвращает InvalidURL управляющего символа

func getProxy() *url.URL {
    proxyUrl := "https://www.proxy-list.download/api/v1/get?type=http&country=US"
    client := &http.Client{}
    req, err := http.NewRequest("GET", proxyUrl, nil)
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error proxy ", err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("Error response body", err)
    }
    details := string(body)
    temp := strings.Split(details, "\n")
    fmt.Println("http://" + temp[rand.Intn(30)])
    checkProxy, err := url.Parse("http://" + temp[rand.Intn(10)])
    if err != nil {
        fmt.Println("Bad proxy URL", err)
    }

    return checkProxy
}

Ответы [ 2 ]

3 голосов
/ 02 мая 2019
proxyUrl := "https://www.proxy-list.download/api/v1/get?type=http&country=US"

Содержимое этого URL - это строки в формате ip:port\r\n´, i.e. the line delimiter is \ r \ n`, (стиль DOS / Windows).

temp := strings.Split(details, "\n")

Это разбивает содержимое на \n, то есть разделитель строк в стиле UNIX. Это оставляет \r от разделителя строки DOS в строке, что приводит к ip:port\r.

... всегда возвращать неверный URL-адрес управляющего символа

Это оставшийся \r в строке, на которую он жалуется.

0 голосов
/ 02 мая 2019

В списке прокси есть пробелы и возврат каретки. Попробуйте

fmt.Println("http://" + strings.TrimSpace(temp[rand.Intn(30)]))
checkProxy, err := url.Parse("http://" + strings.TrimSpace(temp[rand.Intn(10)]))

Это работает.

...