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

Golang中转发POST请求数据的编解码问题及解决方法

AJAX POST请求转发至外部API时的编解码问题

我有一个AJAX POST请求会发送至Golang后端,目标是在将请求转发至外部API端点前对其进行修改,但即使不做修改直接转发也出现了错误。

AJAX POST请求示例

var ajaxParams = {
    type: 'POST',
    url: '/golang_endpoint', // golang backend endpoint
    dataType: 'json',
    data: encodeURIComponent(JSON.stringify(request)), // 要发送到外部端点的表单数据
    success: onResponse,
    error: onError,
};
$.ajax(ajaxParams);

对应的Golang处理器代码

func golangEndpointHandler(rw http.ResponseWriter, req *http.Request) {
    fmt.Println(req.PostForm)
    resp, err := http.PostForm("webwsite.com/outside/endpoint", req.PostForm)
}

错误现象

发送POST请求时出现500内部服务器错误,例如报错信息:unexpected token at '='。打印req.PostForm的结果显示:map[{"size":"1000","other_data":12345}:[]]。

根据@belindamichaels的回复,我认为ParseForm执行的编解码操作导致转发至外部端点时出现500响应。


可行的组合方案

以下AJAX与Golang代码组合可以正常工作:

AJAX代码

var ajaxParams = {
    type: 'POST',
    url: '/golang_endpoint',
    dataType: 'json',
    processData: false,
    timeout: timeout,
    data: encodeURIComponent(JSON.stringify(request)),
    success: onResponse,
    error: onError,
};

Golang代码

resp, err := http.Post("webwsite.com/outside/endpoint", req.Header.Get("Content-Type"), req.Body)

不可行的组合方案

组合1

AJAX代码

var ajaxParams = {
    type: 'POST',
    url: '/golang_endpoint',
    dataType: 'json',
    processData: false,
    timeout: timeout,
    data: request, // 未做序列化或URL编码
    success: onResponse,
    error: onError,
};

Golang代码

req.ParseForm()
resp, err := http.PostForm("webwsite.com/outside/endpoint", req.PostForm)

错误:500错误,具体提示unexpected token at 'object Object]='。

组合2

AJAX代码

var ajaxParams = {
    type: 'POST',
    url: '/golang_endpoint',
    dataType: 'json',
    processData: false,
    timeout: timeout,
    data: encodeURIComponent(JSON.stringify(request)),
    success: onResponse,
    error: onError,
};

Golang代码

req.ParseForm()
resp, err := http.PostForm("webwsite.com/outside/endpoint", req.PostForm)

错误:500错误,具体提示unexpected token at '='。


疑问

请问在准备发送至外部端点时,如何对数据进行正确的stringify和urlencode处理?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:25:47