Python сокет и метод GET протокола HTTP? - PullRequest
0 голосов
/ 23 апреля 2020

У меня проблема с использованием метода GET протокола HTTP, с использованием библиотеки socket в python 3.8.2. Мой код:

import socket

mysocket=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysocket.connect(('www.w3.org',80))

msg = 'GET https://www.w3.org/Status.html HTTP/1.1\r\n\r\n'
mysocket.sendall(msg.encode())

while True:
    data = mysocket.recv(1024)
    if (len(data)<1):
        break
    data.rstrip()
    print(data.decode())

mysocket.close()

Предполагается, что он напечатает html код w3.org/Status.html в консоли, но вместо этого он возвращает Error 400 Bad Request, здесь:

$ python web_navigator.py

HTTP/1.1 400 Bad Request
date: Thu, 23 Apr 2020 02:13:59 GMT
last-modified: Thu, 26 Mar 2020 19:01:07 GMT
etag: "3f4-5a1c69b70a2c0"
accept-ranges: bytes
content-length: 1012
vary: upgrade-insecure-requests
content-type: text/html; charset=iso-8859-1

после этого показывает html страницу с ошибкой 400

Может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 23 апреля 2020

Host заголовок является обязательным для HTTP/1.1, и, поскольку вы подключаете порт 80, схема должна быть http, поэтому просто измените ваше сообщение на :

msg = 'GET http://www.w3.org/Status.html HTTP/1.1\r\nHost: www.w3.org\r\n\r\n'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...