Golang Go语言发送 http 请求, PHP 获取不到参数

发布于 1周前 作者 nodeper 来自 Go语言

Golang Go语言发送 http 请求, PHP 获取不到参数

#GO 客户端

client := &http.Client{}
req, err := http.NewRequest(
	"POST",
	"http://127.0.0.1/login/check",
	nil,
)
if err != nil {
	fmt.Println(err)
	return
}
req.Header.Add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")

req.Body = ioutil.NopCloser(strings.NewReader("username=admin&password=123456"))
resp, _ := client.Do(req)
defer resp.Body.Close()

#PHP 服务端

file_get_contents("php://input") // 这里获取不到任何东西

#GO 服务端

func main() {
	http.HandleFunc("/test", testHtpp)
	http.ListenAndServe(":8085", nil)
}

func testHtpp(w http.ResponseWriter, r *http.Request) { body, _ := ioutil.ReadAll(r.Body) fmt.Println(string(body)) // 可以获取到 Body 的内容 }

请问为什么 php 获取不到任何内容


更多关于Golang Go语言发送 http 请求, PHP 获取不到参数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

12 回复

试试
php<br>var_dump($_POST)<br>

更多关于Golang Go语言发送 http 请求, PHP 获取不到参数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


用抓包工具( wireshark,tcpdump )看看发的到底对不对,如果发送没问题就查接收端

额 为什么不直接用 http.PostForm 呢

不行,都是空

#Go 客户端
<br>client := &amp;http.Client{}<br>req, err := http.NewRequest(<br> "POST",<br> "http://127.0.0.1/login/check",<br> strings.NewReader("username=admin&amp;password=123456"),<br>)<br>if err != nil {<br> fmt.Println(err)<br> return<br>}<br>req.Header.Add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")<br>resp, _ := <a target="_blank" href="http://client.Do" rel="nofollow noopener">client.Do</a>(req)<br>defer resp.Body.Close()<br>
这样写,php 可以获取到参数,但是 req 我想单独设置 body,而不是放在 NewRequest 里面

简单的看了下 http 包,NewRequest 这个方法判断了 body != nil 来给 req.ContentLength 进行赋值,如果你要是手动改了 body,可能还需要再改下 ContentLength

先用 postman 测试 php 代码部分,这样用一个绝对正确的东西在测试你的 go 代码。

6666 感谢,就是这个问题!

很简单啊,既然 NewRequest 工作直接写.Body 不工作,看下 NewRequest 源码就行了
https://golang.org/src/net/http/request.go?s=26724:26793#L792

req 的 body 是拿来接收请求结果的

总感觉你这个需求很奇怪啊…

在Go语言中发送HTTP请求而PHP后端接收不到参数的问题,通常与请求参数的编码、发送方式或PHP端处理参数的方式有关。以下是一些排查和解决问题的建议:

  1. 检查请求方法: 确保Go语言发送的是正确的HTTP方法(如GET或POST)。如果是POST请求,确保PHP端也按POST方式接收数据。

  2. 参数编码

    • 对于GET请求,参数应附加在URL的查询字符串中,形如?param1=value1&param2=value2
    • 对于POST请求,如果是表单数据,应使用url.Values来构建请求体,并设置Content-Typeapplication/x-www-form-urlencoded
    • 如果是发送JSON数据,应使用json.Marshal将结构体或map编码为JSON字符串,并设置Content-Typeapplication/json
  3. PHP端接收

    • 对于GET请求,使用$_GET数组。
    • 对于POST表单数据,使用$_POST数组。
    • 如果发送的是JSON数据,PHP端需要使用file_get_contents('php://input')来获取原始POST数据,并使用json_decode解码。
  4. 调试工具: 使用Postman或curl等工具模拟请求,检查PHP端是否能正确接收参数。同时,在Go语言中打印请求的URL或请求体,确认参数是否正确发送。

  5. 查看日志: 检查PHP和Web服务器的错误日志,看是否有关于请求处理的错误信息。

通过上述步骤,通常可以定位并解决参数接收不到的问题。

回到顶部