Как получить код состояния из этого вывода? - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть небольшой код, который использует программирование сокетов для получения HTTP-ответа.То, что я нахожу трудным, - это получить только код состояния из ответа.Как мне получить его без использования каких-либо других библиотек, а также без использования методов очистки?

import logging
import socket
import sys

def retrieve_url(url):

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(("www.google.com", 80))
    s.sendall(b"GET /imghp HTTP/1.1\r\nHost: www.google.com\r\n\r\n")
    print(s.recv(4096))
    s.close()
    return b'Hello'


if __name__ == "__main__":
    sys.stdout.buffer.write(retrieve_url(sys.argv[0]))

Это вывод, который я получаю

b'HTTP/1.1 200 OK\r\nDate: Sun, 22 Sep 2019 01:19:14 GMT\r\nExpires: -1\r\nCache-Control: private, max-age=0\r\nContent-Type: text/html; charset=ISO-8859-1\r\nP3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."\r\nServer: gws\r\nX-XSS-Protection: 0\r\nX-Frame-Options: SAMEORIGIN\r\nSet-Cookie: 1P_JAR=2019-09-22-01; expires=Tue, 22-Oct-2019 01:19:14 GMT; path=/; domain=.google.com; SameSite=none\r\nSet-Cookie: NID=188=uQ70aAjlLl7g1P0cc

и т. Д.

Мне нужно отдельно получить только код состояния (в данном случае только 200)

1 Ответ

1 голос
/ 22 сентября 2019

Официальная библиотека Python HTTP использует следующий код , чтобы сделать то, что вы пытаетесь сделать:

line = s.recv(4096)

try:
    version, status, reason = line.split(None, 2)
except ValueError:
    try:
        version, status = line.split(None, 1)
        reason = ""
    except ValueError:
        # empty version will cause next test to fail.
        version = ""
if not version.startswith("HTTP/"):
    self._close_conn()
    raise BadStatusLine(line)

По сути, они просто делают .split(None,2), чтобы разбить первоедва пробела, между которыми будет статус.

Если вы считаете этот метод " вскрытием ", пожалуйста, дайте мне знать, что допустимо.

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