sockets - go net/http unix域套接字连接

标签 sockets http go

我在连接到我的服务器时遇到问题,该服务器监听 Unix 域套接字。

Go 的 net/http 包似乎无法使用套接字路径连接到目标。

是否有更好的替代方案,而无需使用 net 创建我自己的 HTTP 协议(protocol)实现?


我找到了很多解决方案,例如 these , 但他们不合适

我试过:

_, err := http.Get("unix:///var/run/docker.sock") (将 unix 更改为 path/socket。它总是提示不支持的协议(protocol)

最佳答案

你必须实现你自己的 RoundTripper支持 unix 套接字。

最简单的方法可能是只使用 http 而不是 unix 套接字与 docker 通信。

编辑初始化脚本,添加-H tcp://127.0.0.1:xxxx,例如:

/usr/bin/docker -H tcp://127.0.0.1:9020

您也可以伪造拨号函数并将其传递给传输:

func fakeDial(proto, addr string) (conn net.Conn, err error) {
    return net.Dial("unix", sock)
}

tr := &http.Transport{
    Dial: fakeDial,
}
client := &http.Client{Transport: tr}
resp, err := client.Get("http://d/test")

playground

只有一个小警告,您所有的 client.Get/.Post 调用都必须是有效的 url (http://xxxx.xxx/path 而不是 unix://...),域名无关紧要,因为它不会用于连接。

关于sockets - go net/http unix域套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26223839/

相关文章:

java - 在 Android 上运行的 UDP 服务器用于 LAN

java - 我的JDBC sql语句有什么问题

javascript - Reddit OAuth2 用户身份验证

java - Java core 在 2016 年创建 HTTP 连接的官方方式是什么?

go - 无法理解有关 go 打印功能的代码

sockets - 如何禁用setsockopt()设置的超时?

javascript - Angular 1.6 $http 无错误响应

elasticsearch - 如何检查 ElasticSearch BulkProcessor 服务是否存在

go - 无法修改数组内的结构?

c++ - 线程不刷新数据,在屏幕上显示数据时出错