登录
首页 >  Golang >  Go问答

Golang url.Parse 返回 URL 时无效控制字符

来源:stackoverflow

时间:2024-03-08 10:36:25 409浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《Golang url.Parse 返回 URL 时无效控制字符》,涉及到,有需要的可以收藏一下

问题内容

我正在尝试使用从 free-proxy-list.net 获得的代理抓取一些网站,并使用 golang 将其应用到我的本地 http 请求中,但是当我使用 url.parse() 解析代理时总是返回 invalid控制字符 url

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
}

解决方案


proxyurl := "https://www.proxy-list.download/api/v1/get?type=http&country=us"

此 url 的内容为 ip:port\r\n´ 格式的行,即行分隔符为 \r\n`(dos/windows 样式)。

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

这会按 \n(即 unix 样式行分隔符)分割内容。这会将 dos 行分隔符中的 \r 保留在字符串中,从而得到 ip:port\r

...总是返回无效的控制字符 url

这是它所抱怨的行中剩余的 \r

代理列表中存在尾随空格和回车符。 尝试一下

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

这有效。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>