본문 바로가기

네트워크 공부

Python - Requests 모듈

이번엔 파이썬으로 스크립트를 짤 때,

아주 유용하게 응용할 수 있는 requests란 모듈에 대해서 알아보자

 

requests 모듈을 사용하면 페이로드를 날릴 수 있다.

 

기본적인 사용방법은 import로 불러온 후,

URL을 get이나 post 방식으로 응답을 받아온다.

 

 

http 관련 스크립트를 짤 때, selenium 보다 가벼워서 쓰기가 좋다.

 

밑 코드를 입력만 한 것으로 웹브라우저에서 해당 url에 접속한 것과 같은 효과를 얻는다.

 

 

import requests
url = "http://www.naver.com"
response = requests.get(url)
response.status_code
response.text

 

 

response.status_code 를 입력했는데

200의 값을 반환했다면 서버에서 잘 처리되었다는 뜻이다.

 

그런데, get과 post 방식은 data 전달에 있어 약간의 차이가 있다.

 

 

data = {'param1': 'value1', 'param2': 'value'}
res = requests.post(URL, data=data)

 

그리고 조금 더 복잡한 구조로 POST 요청을 해야할 때가 있다고 한다.

import requests, json
data = {'outer': {'inner': 'value'}}
res = requests.post(URL, data=json.dumps(data))

 

테스트를 해보기 위해

Pycharm을 켜서 requests_test.py 파일을 새로 생성했다.

 

GET 방식 테스트

 

get 방식은 일단 간단히 url 만 있어도 패킷을 보낼 수 있다.

 

import requests

url = "http://www.naver.com"
response = requests.get(url)

print("status code:", response.status_code)

url 만 적어주고 requests.get에 넣기만 한 코드이다.

 

실행해보면,

 

200이 잘뜬다. 서버에 패킷이 잘 전달되었다는 뜻이다.

 

이렇게 url만이 아닌 parameter 를 같이 전송할 수도 있다.

첫번째 get 방식은 url 뒤에 ? id = "" & pw = "" 처럼 parameter를 붙여서 전송하게 되는데

 

코드상의 url에 직접 파라미터를 붙여서 넣을 수 있다.

\

이런식으로 보내면 된다.

 

두번째 get 방식은 딕셔너리 방식을 이용하는 것이다.

import requests

parameter = {
    "a" : "bb",
    "b" : 123
}


url = "http://www.naver.com"
response = requests.get(url, params=parameter)

print("status code:", response.status_code)

 

실행해봤더니, 200이 뜨면서 잘된다.

 

 

 

POST 방식 테스트

 

테스트 코드를 입력해보자.

 

get 방식은 url 과 params 가 필요했는데

POST 방식으로 패킷을 보내기 위해서는 url 과 data 가 필요하다.

data 는 딕셔너리 형식으로 두개 정도 생성해주고 url은 아무렇게나 적당한 사이트를 입력했다.

 

 

import requests

datas = {
   "a" : "bb",
   "b" : 123
}

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

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

print("Status code:", response.status_code)

 

실행해보면 200 이 뜬다.

아까처럼 200의 뜻은 서버까지 패킷이 잘 전달되었다는 뜻이다.

 

간단하게 requests 의 기본 사용법을 공부해보았는데,

이걸 응용하면

웹 해킹을 할 때 귀찮은 부분들을 자동화할 수 있을 것이다.

 

 

밑 소스를 참조하여 작성되었습니다.

https://dgkim5360.tistory.com/entry/python-requests

https://hongku.tistory.com/292