golang url 转义

发布于 2022-09-05 22:57:11 字数 188 浏览 17 评论 0

AA := "hello word"
url := " https://www.xxxx.com?aa=" + AA
res,_ := httpGet(url)

这样请求会报错,因为url里有空格,我试了手动将空格转义,但这样麻烦,看了url包,好像都是url解析的方法,golang有没有将url转义的方法?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

呢古 2022-09-12 22:57:12

类似这样子,

package main

import "fmt"
import "net/http"
import "net/url"
import "io/ioutil"

func main() {
    AA := "hello word"
    req := " https://www.baidu.com?query=" + AA
    u,_ := url.Parse(req)
    q := u.Query()
    u.RawQuery = q.Encode() //urlencode
    res,_ := http.Get(u.String())

    result, _ := ioutil.ReadAll(res.Body)   
    res.Body.Close() 

    fmt.Printf("%s", result)
}

感谢@Tranch老师的帮助!

胡渣熟男 2022-09-12 22:57:12

https://github.com/qiukeren/g...

你可以看这里,有一段实例代码,用途是使用map做参数进行请求,对参数和超时也进行了处理,还资瓷了https。


import (
    "crypto/tls"
    "io/ioutil"
    "net/http"
    "net/url"
    "time"
    "strings"
)

//Get is a common http client for httpGet operations and hide UA as GoogleBot.
func Get(urls string) ([]byte, error) {

    req, err := http.NewRequest("GET", urls, nil)

    if err != nil {
        return nil, err
    }
    req.Header.Set("User-Agent", "Googlebot/2.1 (+http://www.google.com/bot.html)")

    client := getClient()
    resp, err := client.Do(req)

    if err != nil {
        return nil, err
    }

    defer resp.Body.Close()
    tempData, err := ioutil.ReadAll(resp.Body)

    if err != nil {
        return nil, err

    }

    return tempData, nil
}

func getClient() *http.Client {
    tr := &http.Transport{
        TLSClientConfig:    &tls.Config{InsecureSkipVerify: true},
        DisableCompression: true,
        DisableKeepAlives:  true,
    }
    client := &http.Client{
        Transport: tr,
        Timeout:   15 * time.Second,
    }
    return client
}

func RequestWithHeader(
    method string,
    url1 string,
    timeout int,
    header map[string]string,
    params map[string]string,
) ([]byte, error) {

    client := getClient()

    paramsA := ""
    if method == "POST" {
        values := url.Values{}
        for k, v := range params {
            values.Add(k, v)
        }
        paramsA = values.Encode()
    }

    req, _ := http.NewRequest(method, url1, strings.NewReader(paramsA))

    for k, v := range header {
        req.Header.Set(k, v)
    }

    if method == "POST" {
        req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
    }

    if method == "GET" {
        values := req.URL.Query()
        for k, v := range params {
            values.Add(k, v)
        }
        req.URL.RawQuery = values.Encode()
    }

    getResp, err := client.Do(req)
    if err != nil {
        return nil, err
    }
    defer getResp.Body.Close()
    body, err := ioutil.ReadAll(getResp.Body)
    if err != nil {
        return nil, err
    }
    return body, nil
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文