Сеть / http не работает с IPv6-адресом - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь сделать запрос "GET" на локальный адрес ipv6 (обнаружен через mdns).Проблема заключается в том, что запрос не выполняется .Это почему?

package main

import (
    "fmt"
    "net/http"
)

func main() {
    url := "http://[fe80::cf5:b02f:27c3:2abe]:7070/kw/"
    rsp, err := http.Get(url)
    fmt.Println(rsp, err)
}

Выход

<nil> Get http://[fe80::cf5:b02f:27c3:2abe]:7070/kw/: dial tcp [fe80::cf5:b02f:27c3:2abe]:7070: socket: Unknown protocol

1 Ответ

0 голосов
/ 24 октября 2018

Вы пытаетесь подключиться к локальному адресу IPv6-ссылки, но для этого требуется действительный идентификатор области.Идентификатором области действия обычно является имя или номер интерфейса (например, enp4s0 или wlp5s0 в Linux; 3 или 12 в Windows).

Необходимо также экранировать %, посколькуэто появляется в URL.Таким образом, он будет выглядеть как %25.

Таким образом, ваш URL должен выглядеть следующим образом:

url := "http://[fe80::cf5:b02f:27c3:2abe%25interface]:7070/kw/"

Где interface - это идентификатор вашей области действия.


Такжехорошо помните, что хотя net/http будет рад отправлять HTTP-запросы к литералам локальных адресов IPv6, веб-браузеры не будут.Они, однако, будут подключаться к именам , которые разрешают правильные области локальных адресов ссылок.Они также будут подключаться к глобальным (и ULA) литералам адресов IPv6.Если в конечном итоге к вашему проекту подключится веб-браузер, имейте это в виду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...