httpposterror_Golang HTTP Post错误:连接被拒绝

此问题似乎在Go 1.6中得到解决.作为参考,原始答案如下.

这里的问题是Go的net.Dialer默认只生成IPv4连接(这似乎是一个bug),但是你的PHP服务器只能监听IPv6.

当您运行php -S localhost:8080时,它正在执行(大部分)正确的操作并绑定到IPv6地址:: 1.它不绑定到IPv4.

这对于大多数软件都不是问题,knows to attempt IPv6 connections first,但是当你调用http.PostForm()时会发生什么,net.http使用它的DefaultTransport,默认情况下使用net.Dialer Dial()来进行传出连接. Dial()尝试解析地址,然后我们深入了解src / net / ipsock.go中的解析器,在那里我们发现Go开发人员在尝试解决其他问题时故意搞砸了:

// We'll take any IP address, but since the dialing

// code does not yet try multiple addresses

// effectively, prefer to use an IPv4 address if

// possible. This is especially relevant if localhost

// resolves to [ipv6-localhost, ipv4-localhost]. Too

// much code assumes localhost == ipv4-localhost.

这显然是一个问题,因为IPv6应该是默认和首选协议. Linux和PHP表现正常,而Go本身则不然.

以上评论见于1.4分支.在主分支中,这已被完全重写,但在新代码中,不优选IPv6或IPv4地址是否是首选.它可能是不确定的;我没有花太多时间看它.基于我在GitHub上发现的问题(见下文),它不太可能实际修复.

在此期间,您可以通过Go连接到:: 1或将PHP绑定到127.0.0.1来解决此错误.您也可以使用正确的行为构建自己的RoundTripper,但这可能太多了,除非您实际上遇到了启用IPv6服务的问题(最终我们都会这样做,所以这确实需要修复).

一些相关的Go问题包括:

还有其他几个不再相关的旧问题,因为代码早已被重写……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值