Golang Go语言发送 http 请求, PHP 获取不到参数
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
试试 php<br>var_dump($_POST)<br>
更多关于Golang Go语言发送 http 请求, PHP 获取不到参数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
用抓包工具( wireshark,tcpdump )看看发的到底对不对,如果发送没问题就查接收端
不行,都是空
#Go 客户端<br>client := &http.Client{}<br>req, err := http.NewRequest(<br> "POST",<br> "http://127.0.0.1/login/check",<br> strings.NewReader("username=admin&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端处理参数的方式有关。以下是一些排查和解决问题的建议:
-
检查请求方法: 确保Go语言发送的是正确的HTTP方法(如GET或POST)。如果是POST请求,确保PHP端也按POST方式接收数据。
-
参数编码:
- 对于GET请求,参数应附加在URL的查询字符串中,形如
?param1=value1¶m2=value2
。 - 对于POST请求,如果是表单数据,应使用
url.Values
来构建请求体,并设置Content-Type
为application/x-www-form-urlencoded
。 - 如果是发送JSON数据,应使用
json.Marshal
将结构体或map编码为JSON字符串,并设置Content-Type
为application/json
。
- 对于GET请求,参数应附加在URL的查询字符串中,形如
-
PHP端接收:
- 对于GET请求,使用
$_GET
数组。 - 对于POST表单数据,使用
$_POST
数组。 - 如果发送的是JSON数据,PHP端需要使用
file_get_contents('php://input')
来获取原始POST数据,并使用json_decode
解码。
- 对于GET请求,使用
-
调试工具: 使用Postman或curl等工具模拟请求,检查PHP端是否能正确接收参数。同时,在Go语言中打印请求的URL或请求体,确认参数是否正确发送。
-
查看日志: 检查PHP和Web服务器的错误日志,看是否有关于请求处理的错误信息。
通过上述步骤,通常可以定位并解决参数接收不到的问题。