Пытаясь отправить запрос на сервер с библиотекой сокетов Python, я получаю сообщение об ошибке типа - PullRequest
0 голосов
/ 04 июля 2018

Мне кажется, что я получаю сообщение об ошибке типа при запросе к серверу "www.python.org". Я только начал изучать сети, и я перейду к основам. Я понимаю, почему возникла ошибка типа, поскольку строка не ожидалась, но, исходя из учебника PDF, который я читаю, это формат для запроса к серверу, я неправильно набираю ?? Как мне избежать ошибки типа? Благодарю. Код ниже:

from socket import *

s = socket(AF_INET,SOCK_STREAM)
s.connect(("www.python.org",80)) # connect
s.send("GET /index.html HTTP/1.0\n\n") # send request
data = s.recv(10000) # get response
s.close()

1 Ответ

0 голосов
/ 04 июля 2018

Похоже, вы используете Python 3. В Python 3 строковые литералы являются объектами Unicode. Unicode-объекты не могут быть отправлены через сетевой сокет, только байты могут быть отправлены.

Учебное пособие, которое вы читаете, могло быть написано для Python 2, где строковые литералы - это байты, а не юникод.

В Python 2:

this_is_bytes = "my string"
this_is_unicode = u"my string"

В Python 3 все было переключено, чтобы по умолчанию иметь строки Unicode:

this_is_bytes = b"my string"
this_is_unicode = "my string"

Вам нужно либо закодировать строку в юникоде в байты:

s.send("GET /index.html HTTP/1.0\n\n".encode('ascii')) # send request

Или используйте байтовый литерал:

s.send(b"GET /index.html HTTP/1.0\n\n") # send request

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