CodeGym /행동 /Python SELF KO /네트워크 작업 실습

네트워크 작업 실습

Python SELF KO
레벨 23 , 레슨 3
사용 가능

4.1 응답 처리

requests 모듈은 서버 응답을 다루기 위한 편리한 메서드를 제공해.

상태 코드

응답과 함께 서버가 요청 처리 상태도 보내지. 상태에 대한 정보는 status_codereason 필드에 있어. 아래 예제를 봐봐:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)  # 응답의 상태 코드를 출력
print(response.reason)  # 상태에 대한 설명을 출력
print(response.ok)  # 상태 코드가 400 미만이면 True 반환
        

헤더

당연히 HTTP 요청은 헤더 없이 못 가지! 요청 헤더나 응답 헤더가 필요하면 headers 필드를 통해 접근할 수 있어:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.headers)  # 응답 헤더를 출력
print(response.headers['Content-Type'])  # 특정 헤더 값을 출력
            

응답 본문

서버 응답에는 바이트, 텍스트, json 또는 xml이 포함될 수 있어. 서버에 요청한 내용을 알고 있다면, 원하는 타입의 객체를 바로 얻기 위해 메서드나 필드를 사용할 수 있어:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.text)  # 텍스트 형태로 응답 본문 출력
print(response.json())  # JSON 형태로 응답 본문 출력
print(response.content)  # 바이트 형태로 응답 본문 출력
        

헤더 (headers)와 응답 상태에 대한 자세한 내용은 네트워크의 작동 방식에 대한 강의에서 다룰 거야.

4.2 에러 처리

requests 모듈은 에러를 다룰 수 있는 예외를 제공해.

HTTP 표준은 예외를 제공하지 않아, 대신에 에러 코드를 (status_code) 사용해. 요청 실패 시 Python 예외를 발생시키고 싶다면, 함수 raise_for_status()를 명시적으로 호출해야 해.

예제:


import requests

try:
    response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
    response.raise_for_status()  # 4xx 및 5xx 상태 코드를 위한 예외 발생
except requests.exceptions.HTTPError as err:
    print(f"HTTP error occurred: {err}")
except Exception as err:
    print(f"Other error occurred: {err}")
else:
    print("Success!")
        

에러 코드에 대한 자세한 내용은 네트워크의 작동 방식에 대한 강의에서 알아볼 수 있어.

4.3 데이터 전송

JSON이 발명되기 전에는 대량의 데이터를 전송하기 위해 "폼"을 사용했어. 폼은 브라우저 페이지의 특별한 객체이자 HTTP에서의 데이터 표준이야. 데이터를 전송하고 싶다면 요청과 함께 data 파라미터를 전달하면 돼.

중요! GET 요청은 요청 본문을 포함하지 않기 때문에 데이터를 전송할 수 없어. 모든 데이터는 URL에만 포함돼.

GET 요청으로 데이터 전송

GET 요청에서는 URL의 파라미터를 통해 데이터를 전송해. 예제를 봐봐:


import requests

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url)  # 추가된 파라미터와 함께 URL 출력
    

폼 데이터 전송

데이터를 서버로 전송하기 위해 POST 요청을 사용할거야.

예제:


import requests

data = {
    'username': 'example',
    'password': 'password'
}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())
        

파일 전송

인터넷으로 이진 데이터를 전송하고 싶다면, 예를 들어 이미지를 업로드하는 경우, files 파라미터를 사용하여 파일을 요청에 첨부하면 돼.

예제:


import requests

files = {'file': open('example.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
        

정말 간단하지. 여러 파일을 전송하고 싶다면, files 변수에 임의의 이름으로 나열하면 돼.

중요! 파일 전송 후에는 파일을 닫아 리소스 누수를 방지해야 해. with 구조를 사용하면 작업이 끝나면 자동으로 파일이 닫혀:


import requests

with open('example.txt', 'rb') as f:
    files = {'file': f}
    response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
        

4.4 로그인 및 인증

API (Application Programming Interface)란 서로 다른 프로그램들이 상호작용 할 수 있게 하는 규칙과 프로토콜의 집합이야. 많은 웹사이트와 서비스들이 API와 상호작용하기 위해 로그인 후 요청을 보내도록 허용해.

성공적으로 로그인하면 "서버와의 인증 세션"을 포함하는 세션 (session) 객체를 받게 돼. 이후 요청에서는 이 객체를 사용해야 해.

인증

서버에 로그인하기 위해서는 인증(로그인 과정)을 거쳐야 해, 요청과 함께 사용자 정보를 보내야 해.


import requests
from requests.auth import HTTPBasicAuth
        
response = requests.get('https://httpbin.org/basic-auth/user/pass', \ 
                        auth=HTTPBasicAuth('user', 'pass'))
print(response.status_code)
        
    

이게 인증 과정이야, 하지만 일반적으로 세션과 함께 사용해.

세션 사용

세션은 요청 간에 cookies나 사용자 인증 정보와 같은 매개변수를 유지할 수 있어.


import requests

payload = {
    'username': 'your_username',
    'password': 'your_password'
}
            
# 세션 생성
session = requests.Session()
            
# 사이트에 로그인
login_response = session.post('https://example.com/login', data = payload)
            
# 로그인된 사용자로 세션 작업을 계속 진행
data_response = session.get('https://example.com/api/data')
print(data_response.json())
        
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION