【发布时间】:2015-04-07 05:26:55
【问题描述】:
我正在尝试在运行 PHP 应用程序的端口 8080 上向 localhost 发送一个发布请求。
卷曲工作正常:
curl --data "key=asdf" http://localhost:8080/
但在 Go 中我收到以下错误:
Post http://localhost:8080: dial tcp 127.0.0.1:8080: connection refused
代码如下:
func submitForm(value string){
resp, err := http.PostForm("http://localhost:8080", url.Values{"key": {value}})
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
_, err = ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println("status = ",resp.Status)
}
submitForm("asdf")
我用httpry监控http流量,发现没有生成http请求但是有一些包:
4 packets received, 0 packets dropped, 0 http packets parsed
更多事实:
- 我的操作系统是 Linux
-
我使用 PHP 的内置网络服务器。使用以下命令启动服务器:
php -S 本地主机:8080
【问题讨论】:
-
这段代码对我来说很好用。如何调用
submitForm以及如何启动 php 服务器?服务器和这个 go 代码是在同一台机器上运行的吧? -
我这样称呼它: submitForm("asdf") 服务器是在同一台机器上启动的: php -S localhost:8080 你认为这是 PHP(不是 Go 的)的错吗?跨度>
-
可能。什么版本的php?比较curl和go之间的http请求可能会很有趣,看看php服务器正在寻找的标头是否存在差异。
-
PHP 5.6.4 如何查看 http 请求?由于请求被拒绝,在 php 中打印 $_POST 将不起作用。
-
对,我以为你可以打印 go 请求,但你不能,因为你使用 PostForm。而且我不确定如何使 php 服务器更详细。 Go 中的 Get 或 Post 函数是否有效?您是否尝试过使用较低级别的 go 函数构建请求,如此处所述 golang.org/pkg/net/http ?