[英]How to get the status code from this output?
我有一個小代碼,它使用套接字編程來獲得 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]))
這是我得到的 output
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
)
官方 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)
來分割前兩個空格,這兩個空格之間將是狀態。
如果您認為這是一種“剝離”方法,請告訴我什么是允許的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.