728x90
반응형
Python 을 이용한 HTTP 패킷 파싱하기 2회차
HTTP 패킷 Header 파일을 파싱하는 코드를 공유합니다.
※ Response Header
네이버 검색하는 패킷 Header 입니다
HTTP/1.1 200 OK
X-Powered-By: BLOOD
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Max-Age: 1000
Date: Tue, 22 Jan 2019 15:32:42 GMT
Connection: keep-alive
Transfer-Encoding: chunked
※ Response Header 파싱 코드
import os
from io import BytesIO
import urllib
import http
from http.client import HTTPResponse
class FakeSocket():
def __init__(self, response_str):
self._file = response_str
def makefile(self, *args, **kwargs):
return self._file
def __del__(self):
try:
if self._file:
self._file.close()
except Exception:
pass
globals().update(http.HTTPStatus.__members__)
class HTTPResponseHeader(HTTPResponse):
"""
status : 200, 300
"""
file_dir = None
def __init__(self, file_dir):
self.file_dir = file_dir
socket = self.read_header()
super(HTTPResponseHeader, self).__init__(socket)
self.begin()
def status_obj(self):
return http.HTTPStatus(self.status)
def read_header(self):
try:
response_file = os.path.join(self.file_dir, 'response.head')
if os.path.exists(response_file):
source = FakeSocket(open(response_file, 'rb'))
return source
else:
print("Http Response - Read Header {0}".format(os.path.join(session_dir, 'response.head')))
raise FileNotFoundError
except IOError as e:
print("Http Response - Read Header {0}".format(e))
raise FileNotFoundError
@property
def content_type(self):
return self.headers.get("Content-Type", None)
if __name__ == '__main__':
response_header = HTTPResponseHeader("./")
print(response_header.content_type)
k= response_header.status_obj()
print(k)
print(k.value)
print(k.phrase)
print(k.description)
◈ 파싱된 출력 내용.
첨부파일
→ response.head : 응답 Header 내용
→ response.py : 응답 Header 파일 파싱 코드
728x90
반응형
'+ Development > Python' 카테고리의 다른 글
[Python] pip를 통해 모듈(Module) 업데이트 (2) | 2019.09.24 |
---|---|
[Python] pycrypto Module(모듈)을 이용한 암/복호화 하기 (0) | 2019.09.11 |
[Python] HTTP - 일반적인 Request Header 파싱 코드(Lv.1) (0) | 2019.08.15 |
[Python] regex 값을 dict 로 가져오기 (0) | 2019.08.12 |
[Python] 홀수, 짝수 나누기 (0) | 2019.07.13 |
댓글