파이썬 강의/requests

파이썬 requests 1. get, post, response

마리사라 2020. 12. 16. 12:47
반응형

파이썬 requests 1번째 강의는 get과 post입니다.

 


0. 기초 설명

기본적으로 HTTP 통신은 사용자가 먼저 무언가를 보내면, 서버에서 답변을 해주는 형식입니다.

 

예를 들어서 제가 네이버 사이트를 접속한다고 하겠습니다.

https://www.naver.com

 

네이버

네이버 메인에서 다양한 정보와 유용한 컨텐츠를 만나 보세요

www.naver.com

위와 같은 주소를 입력하여 네이버로 접속을 시도하면, 컴퓨터에서는 네이버 서버에 해당 사이트에 대한 정보를 얻고 싶다는 GET 코드를 보내게 됩니다.

 

이제 네이버 서버에서는 그에 대한 응답으로 여러가지 코드를 보내게 됩니다. 만약 코드가 OK라는 코드였다면 서버에서는 후속 조치로 네이버 사이트에 대한 정보를 담아서 컴퓨터에 보냅니다.

 

여기까지가 GET 통신의 기본적인 요소입니다.

 

 

이번에는 POST 통신을 알아보겠습니다.

 

이번에는 네이버에 단순히 정보를 알고싶은게 아니라, 네이버 홈페이지에 로그인을 한다고 가정하겠습니다.

 

똑같이 네이버 주소에 접속을 시도하는데, 이번에는 GET이 아닌 POST를 통해 정보를 알려주는 통신임을 밝힙니다. 그때 HTTP 코드에는 알려줄 정보가 포함되어야 합니다.

 

네이버 서버에서는 GET과 마찬가지로 그에 대한 응답을 보내야 합니다. 만약 ID와 PW가 일치한다면 인증되었음을, 불일치한다면 인증되지 않았음을 알리는 HTTP 코드를 보냅니다.

 

여기까지 POST 통신의 기본 요소입니다.

 

 

마무리로 Response에 대하여 몇가지만 알려드리겠습니다.

 

컴퓨터에서 GET이나 POST를 서버에 보내면 서버는 그에 대한 응답(Response)을 보냅니다. 하지만 서버에 없는 경우도 있을 수 있습니다.

 

http://www.naver.com/1

만일 위와같은 주소로 접속하려 한다고 가정하겠습니다. 우선 사이트는 naver.com이니 네이버 서버에 GET 코드가 전송됩니다. 그렇다면 네이버 서버에서는 자신의 서버에 1이라는 하위 주소가 있는지 확인합니다.

 

하지만 네이버에서는 1이라는 하위 주소는 존재하지 않으므로 OK를 보낼 수 없습니다. 그래서 페이지를 찾지 못했다는 Not Found라는 응답을 보냅니다. 이것이 흔히 보셨던 404 Not Found의 정체입니다.

 

나무위키의 404 Not Found

 

이런 식으로 Response는 각각의 번호가 붙어 있습니다. 해당 번호가 궁금하신 분들은 아래의 사이트에서 자세히 확인하실 수 있습니다.

 

namu.wiki/w/HTTP/%EC% 9D%91% EB% 8B% B5%20% EC% BD%94% EB%93%9C

 

HTTP/응답 코드 - 나무위키

성공: 이 작업을 성공적으로 받았고, 이해했으며, 받아들여졌다는 의미이다. 200, 204, 206을 제외하고는 볼 일이 거의 없는 코드들이다. 200 OK: 성공적으로 처리했을 때 쓰인다. 가장 일반적으로 볼

namu.wiki


1. 실전 코드

이제 실제로 네이버에 HTTP 코드를 보내보겠습니다.

import requests

우선 requests모듈을 import 해줍니다. 이후 강의부터는 생략하도록 하겠습니다.

 

url = 'http://www.naver.com'

이제 url을 입력합니다. url을 입력하실 때 주의사항은 반드시 http부터 시작해야 한다는 점입니다. http 없이 바로 www로 시작하거나 naver.com 만 입력할 경우에는 requests 모듈에서 인식하지 못합니다.

 

get = requests.get(url=url)

이제 requests 모듈의 get으로 GET 코드를 전송합니다. 이때 여러 인수가 들어갈 수 있는데, url=(주소)를 통해 주소를 입력합니다.

 

이제 get을 print 해보겠습니다.

 

200이라는 코드를 받았다는 것을 확인할 수 있습니다. 200은 OK라는 뜻입니다.

 

url = 'http://www.naver.com/1'

이번에는 아까처럼 틀린 주소를 입력해 보겠습니다.

 

응답이 404로 바뀌었으며, 이는 틀린 주소임을 알 수 있습니다.

 

이번에는 post를 해보겠습니다.

url = 'http://nid.naver.com/nidlogin.login'

로그인 사이트를 url로 입력합니다.

 

이제 로그인을 위한 양식을 알아야 합니다. 

네이버 로그인 사이트 CSS

코드를 확인해 보면 아이디는 id, 패스워드는 pw라는 이름으로 되어있는 것을 보실 수 있습니다.

 

data = {'id': '1234', 'pw': 'asdf'}

requests에서 data는 딕셔너리 형식으로 주고받습니다. 그래서 보낼 데이터를 딕셔너리 형식으로 만들어 줍니다.

 

post = requests.post(url=url, data=data)

이제 post를 print 해보겠습니다.

 

똑같이 200 OK가 나왔습니다. 하지만 이것은 논리 에러입니다. 200 OK는 로그인이 잘 되어서 200 OK가 아닌, 그저 로그인하는 주소에 잘 들어왔다는 뜻의 200 OK입니다. 제대로 작동하는 로그인 기능을 만들기 위해서는 requests 모듈만으로는 불가능하니, 다음에 알려드리겠습니다.


2. 마치며

이제 requests 모듈의 기초에 들어왔습니다. 앞으로는 다른 모듈과 연계해서 더 많은 기능을 하는 방법을 알려드리도록 하겠습니다.

 

 

 

반응형