Вы не подключаетесь к URL . Вы подключаетесь к хосту. Например, когда я назначаю host = stackoverflow.com
, ваш код работает нормально.
Сам слой сокета ничего не знает о URL. URL-адрес включает путь, который вы указываете на HTTP-сервер хоста после подключения. Итак, если вы хотите получить, скажем, URL-адрес "http://stackoverflow.com/questions",, который вы подключаете к хосту" stackoverflow.com ", то укажите это в качестве первой строки в HTTP-запросе:
GET /questions HTTP/1.1\r\n
Этот запрос (к stackoverflow.com) фактически доставит ответ 301. 301 - это ответ перенаправления, сообщающий, что искомый документ доступен с другого хоста или службы. Это все более распространенный ответ, так как большинство сайтов «http» теперь перенаправляют клиента на соответствующую службу «https».
Если указанное вами имя хоста не является допустимым (например, если вы пытаетесь подключиться к «szackoverflow.com»), поиск имени хоста, который выполняется автоматически от вашего имени, завершится неудачей, что приведет к socket.gaierror
исключение ("gai" => getaddrinfo
). В моей системе Linux это выглядит так:
Unexpected error: [Errno -2] Name or service not known
В другой операционной системе текст, содержащий эту ошибку, может быть сформулирован по-другому.