파이썬 공부하기
python requests 모듈
웹 모의해킹을 하거나(blind sql injection 등), 웹 크롤링을 할 때 python이서 requests 모듈을 많이 이용한다.
그래서 requests 모듈 사용법을 정리했다.
1. 기본적인 사용법
import requests
URL='http://www.naver.com'
response=requests.get(URL)
response.status_code
response.text
# 위의 문장을 실행하면, 웹 브라우저에서 네이버 사이트를 접속한 것과 똑같은 결과가 나타난다.
1. www.naver.com이라는 URL주소로 GET요청(requests)를 보냈다.
2. 서버에서는 그 요청을 받아 뭔가를 처리한 후 요청자에게 응답(response)을 준다.
- response.status_code를 통해서 상태코드를 주고 (응답이 200이면 정상처리 응답.),
- response.text를 통해서 응답 값을 준다.
상태코드 (status_code)
1xx (정보): 요청을 받았으며 프로세스를 계속한다
2xx (성공): 요청을 성공적으로 받았으며 인식했고 수용하였다
3xx (리다이렉션): 요청 완료를 위해 추가 작업 조치가 필요하다
4xx (클라이언트 오류): 요청의 문법이 잘못되었거나 요청을 처리할 수 없다
5xx (서버 오류): 서버가 명백히 유효한 요청에 대해 충족을 실패했다
2. GET요청시 parameter 전달하는 방법
import requests
URL='www.naver.com'
params={'parm1':'value1','parm2','value2'} #key:value 형식
response=requests.get(URL, parms=parms)
#
1. 위의 명령어를 실행하면, http://www.naver.com?parm1=value1&parm2=value2 형태(URL?parm=값)로 값이 전달된다. 결과는 ( print(response.url) 로 확인 가능 )
2. response로 결과 값을 준다.
3. POST요청시 data 전달하는 방법
1) 기본 requests.post형태로 보낼 때
import requests
URL='www.naver.com'
data={'parm1':'value1',:'parm2':'value2'}
response=requests.post(URL, data=data)
# GET요청과 사용법이 거의 비슷하다.
requests에서 get을 post로, parms를 data로 바꿔주기만 하면된다.
1. 위의 명령어를 실행하면, http://www.naver.com로 data값이 전달된다. (Post는 data값을 따로 보내준다)
2. response로 결과 값을 준다.
2) 더 복잡한 구조로 POST 요청시에는 json모듈을 추가하여 사용한다.
import requests, json
data={'outer':{'inner':'value'}}
response=requests.post(URL, data=json.dumps(data))
4. 헤더추가, 쿠키추가하기
위의 get, post 요청 말고
별도의 헤더 옵션을 추가하고자 할때는 headers 옵션을 사용하고,
쿠키 값을 요청으로 보내고 싶으면 cookies 옵션을 사용하면 된다.
headers={'Content-Type':'application/json; charset=urf-8'}
cookies={'session_id':'car12'}
response=requests.get(URL, headers=headers, cookies=cookies)
5. 응답(Response) 객체
요청(requests)를 보내면 응답(response)을 받는다. 응답은 python 객체로 받는다
response.request #내가 보낸 request객체 접근 가능
response.headers # 응답 헤더
response.status_code #응답 코드
response.raise_for_status() #200 OK 아닌 경우 에러
response.json() # json형태의 응답 데이터 - 딕셔너리 타입으로 바로 변환
response.text #응답 데이터
response.content # 응답 데이터
r.encoding = 'utf-8' # 인코딩 지정
참고!
urllib3 vs requests 모듈 비교
파이썬에서 두 모듈은 비슷한 역할은 한다.
두 모듈의 차이는
1) requests는 딕셔너리 형태로 데이터 전송
urllib는 인코딩하여 바이너리 형태로 전송
2) requests는 요청 메소드(get, post)를 명시
urllib는 데이터의 여부에 따라 요청을 구분
3) 없는 페이지 요청시 requests는 에러 없음
urllib는 에러 있음
+
이렇게 requests모듈을 통해서 요청을 하고 response로 응답 받은 것을 beautifulsoup 모듈을 이용해서 보기 좋게 처리해 줄 수 있다. 그래서 두 모듈(requests, BeautifulSoap)이 크롤링을 하거나 웹사이트를 통해서 값을 받아 올때 같이 많이 사용된다.