You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言中http.NewRequest将单引号转义为%27的问题求助

解决Go中HTTP请求URL单引号被自动编码的问题

我之前也碰到过类似的情况,其实这是Go的net/http包在处理URL时的默认行为——它会严格遵循RFC 3986规范,对URL中的特殊字符进行自动编码,单引号'就属于被编码的范畴,所以会被转成%27。

为什么会自动编码?

根据RFC 3986的定义,单引号'属于"sub-delims"子分隔符,虽然在一些场景下可以不编码,但Go的URL解析器为了保证URL的合规性,默认会对这类字符进行编码转换。

如何保留原单引号?

要绕过自动编码,我们可以手动构造url.URL结构体,直接指定Path和RawQuery字段,这样Go就不会对我们预先拼接好的内容进行编码处理:

package main

import (
	"net/http"
	"net/url"
)

func main() {
	root_folder_url := "rooturl"
	// 手动构造完整的URL结构
	targetURL := &url.URL{
		Scheme:   "http",
		Host:     "domain",
		Path:     "/_api/Web/GetFolderByServerRelativeUrl('" + root_folder_url + "')",
		RawQuery: "$expand=Folders,Files",
	}

	// 基于构造好的URL创建请求
	req, err := http.NewRequest("GET", targetURL.String(), nil)
	if err != nil {
		// 这里添加错误处理逻辑
		panic(err)
	}

	// 此时打印req.URL.String()就能看到保留单引号的URL了
	println(req.URL.String())
}

注意事项

  • 这种方法需要你确保root_folder_url本身不包含其他需要编码的特殊字符,如果有,你需要手动对这些字符进行编码(比如用url.PathEscape处理路径部分的特殊字符,但跳过单引号),否则可能导致URL无效。
  • 虽然保留单引号符合你的需求,但要确认目标服务器能够正确解析带单引号的URL,有些服务器可能只接受编码后的格式。

内容的提问来源于stack exchange,提问作者vkc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:04:34