본문 바로가기
웹(web)/백엔드-python

parse_qs(POST data parsing)

by 바코94 2020. 7. 1.

클라이언트의 요청이 POST 방식이면 data는 entity body에 담겨서 온다. 따라서 별도의 작업을 해야 data를 사용할 수 있다.

 

POST data parsing 예제

magic=mystery&secret=spooky 의 데이터를 서버에게 보냈다고 하자.

 

1. content lenght를 파악한다. 

length = int(self.headers.get('Content-length', 0)) 

self.headers.get은 header field에 있는 값들을 가져올 때 쓰인다. 헤더 정보 중에 키가 'Content-length'인 값을 가져오고 'Content-length'가 없을 경우에 0을 리턴하겠다는 뜻이다.

 

2. entity body에서 데이터 디코딩하여 "magic=mystery&secret=spooky"와 같은 데이터를 가져옴

data = self.rfile.read(length).decode()

 

3. data 별로 파싱하여 {key: [value1, value2, ... ] , key: ... } 형태로 파싱

parsing_data = parse_qs(data)

 

4. key별로 첫번째 value 가져옴

magic = parsing_data["magic"][0]
secret = parsing_data["secret"][0]

 

 주의할 것은 entity body에 동일한 키인데 여러 개의 값이 올 수 있다는 것이다. 여러 개 값이 언제 오는지 궁금하면 html form에 대해서 찾아보면 된다. 이를 위해 parse_qs에서는 key에 대한 value값을 리스트로 제공한다. 값이 하나여도 리스트에 담기게 됨을 주의하자.

'웹(web) > 백엔드-python' 카테고리의 다른 글

JSON  (0) 2020.07.02
do_GET+ do_POST 예제2  (0) 2020.07.01
do_GET+ do_POST 예제1  (0) 2020.07.01
EchoServer  (0) 2020.07.01
HelloServer  (0) 2020.07.01