HTTP 서버와 통신(웹 요청)
python

HTTP 서버와 통신(웹 요청)

연구소 인턴 2023. 8. 23.
300x250
반응형

필요한 라이브러리 설치

HTTP 요청을 사용하기 위해 python에 필요한 라이브러리를 설치해 주려고 합니다.

cmd(명령 프롬프트)를 실행시켜 pip install requests를 설치해줍니다.

HTTP 서버와 통신(웹 요청) - 필요한 라이브러리 설치

Python 프로그램 실행

IDLE이나 Pycharm을 실행시킵니다.

필요한 라이브러리인 Requests를 import시키고, 원하는 사이트를 지정해줍니다.

HTTP 서버와 통신(웹 요청) - Python 프로그램 실행

HTTP 상태코드가 나오는 것을 보아 정상적으로 실행되는 것을 알 수 있습니다. 

import requests
host ="URL"
res = requests.get(host)
res
#http 상태코드가 출력된다.

HTTP 응답코드

웹 서버가 클라이언트에게 요청한 작업의 처리 상태를 전달하는 데 사용되는 숫자로 된 코드입니다.

웹 요청과 응답 사이에서 어떤 일이 일어났는지를 나타내며, 클라이언트(브라우저 또는 다른 클라이언트 애플리케이션)에게 어떻게 반응해야 하는지를 나타냅니다.

이러한 상태 코드는 HTTP 프로토콜의 일부이며, 3자리 숫자로 이루어져 있습니다.

일반적으로, HTTP 상태 코드는 다음과 같이 그룹으로 나뉩니다.

1xx (Informational): 요청이 받아들여졌거나 처리 중임을 나타냅니다. 일반적으로 실제 응답 본문에 정보가 포함되지 않습니다.

2xx (Successful): 요청이 성공적으로 처리되었음을 나타냅니다. 가장 잘 알려진 상태 코드 중 하나는 200(OK)으로, 요청이 성공적으로 완료되었음을 의미합니다.

3xx (Redirection): 클라이언트가 추가 조치를 취해야 함을 나타냅니다. 이 코드는 리소스가 영구적으로 이동했거나 임시적으로 다른 위치에 있을 수 있음을 나타내며, 브라우저가 자동으로 새 위치로 이동할 수 있도록 합니다.

4xx (Client Error): 클라이언트의 요청이 잘못되었거나 처리할 수 없음을 나타냅니다. 예를 들어, 404(Not Found)는 요청한 리소스를 찾을 수 없음을 나타냅니다.

5xx (Server Error): 서버가 유효한 요청을 처리하지 못했음을 나타냅니다. 서버 내부 오류나 과부하 등이 발생할 때 사용됩니다.

 

상태 코드의 몇 가지 예시:

200 OK: 요청이 성공적으로 처리되었음.

404 Not Found: 요청한 리소스를 찾을 수 없음.

500 Internal Server Error: 서버 내부 오류로 인해 요청을 처리할 수 없음.

302 Found (Redirect): 요청한 리소스가 일시적으로 다른 주소로 이동함.

 

 

HTTP 상태 코드에 대한 자세한 내용은 아래 사이트를 참조하시면 됩니다.

HTTP 상태 코드 - HTTP | MDN (mozilla.org)

 

HTTP 상태 코드 - HTTP | MDN

HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려줍니다. 응답은 5개의 그룹으로 나누어집니다: 정보를 제공하는 응답, 성공적인 응답, 리다이렉트, 클라이언트 에러, 그리고...

developer.mozilla.org

RES의 기능

res에는 여러 기능들이 있는데, 그 중에서 일부를 소개한 내용입니다.

res.url
# 현재 res에 들어간 URL 주소를 확인할 수 있다.
res.status_code
# HTTP 상태 코드만 출력
res.text
# 웹에서 HTML을 출력합니다

파라미터 사용

다음은 Params를 사용하여 Requests하도록 하겠습니다.

my_params = {'id':'BJ_hacker','pass','admin'}
# 파라미터 값을 설정해준다. ID, PASSWORD
request.get(host, params = my_params)
# HTTP 상태코드가 200이 정상이다.

ID와 PW의 전달 방법

Get하고 Post 방식이 있는데, GET방식은 URI에 노출이 되기 때문에 ID,PW는 POST 방식으로 진행됩니다.

이번에는 Post로 전달하는 방식을 사용해 보겠습니다.

import json
import requests

host = "http://www.virustotal.com"
my_data = json.dumps({'id':'bj_hacker','pass':'admin'})
my_data
response = requests.post(host, data = my_data)
response
response.text

이번에는 Cookie를 추가하려고 합니다.

쿠키는 인터넷 사용자의 컴퓨터에 저장되는 작은 데이터 조각인데, 이 데이터 조각은 웹사이트가 사용자를 식별하고 상태 정보를 유지하기 위해 사용됩니다.

쿠키는 사용자가 웹사이트를 방문할 때 생성되어 브라우저에 저장되며, 해당 웹사이트가 사용자를 인식하고 추적하는 데 사용됩니다.

 

쿠키는 크게 세션 쿠키와 영구 쿠키로 나뉩니다.

 

1. 세션 쿠키: 이 쿠키는 사용자가 웹사이트를 방문하는 동안에만 유지됩니다. 웹 브라우저를 닫으면 세션 쿠키는 삭제됩니다. 주로 장바구니 정보나 로그인 상태와 같은 임시 정보를 저장하는 데 사용됩니다.

 

2. 영구 쿠키: 이 쿠키는 브라우저를 닫아도 유지되며, 설정한 기간 동안 보존됩니다. 주로 사용자의 선호 설정이나 로그인 정보를 저장하는 데 사용됩니다. 쿠키는 웹사이트가 사용자의 행동을 기억하고 사용자 경험을 개선하는 데 도움을 줍니다.

 

예를 들어, 쇼핑 웹사이트에서는 사용자가 상품을 장바구니에 담았는지 여부를 파악하거나, 로그인한 사용자를 인식하여 개인화된 콘텐츠를 제공하는 데 활용될 수 있습니다.

 

하지만 쿠키는 개인 정보 보호와 관련하여 우려가 있을 수 있습니다. 사용자의 개인 정보를 추적하거나 수집하는 데 사용될 수 있기 때문입니다. 따라서 많은 웹 브라우저에서는 사용자가 쿠키를 차단하거나 삭제할 수 있는 설정을 제공하고 있습니다.

import requests, json
host = "http://www.virustotal.com"
my_header = {'my_header':'value'}
my_cookie = {'seesion_id':'cookie'}

res = requests.get(host, headers = my_header, cookies = my_cookie)
res

 

웹 요청을 브라우저처럼 가능하다는 것을 알 수 있습니다.

300x250
반응형

댓글