일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 인공지능
- 자료구조
- 파이썬
- 웹개발
- 컴퓨터비전
- 보안
- 알고리즘
- 프로그래밍언어
- 소프트웨어
- 네트워크
- 데이터베이스
- Yes
- 데이터구조
- 컴퓨터과학
- 프로그래밍
- 버전관리
- I'm Sorry
- 자바스크립트
- 코딩
- 네트워크보안
- 빅데이터
- 소프트웨어공학
- 컴퓨터공학
- 딥러닝
- 사이버보안
- 데이터분석
- 2
- 머신러닝
- 데이터과학
- 클라우드컴퓨팅
- Today
- Total
스택큐힙리스트
요청을 보내는 동안 세션 내 시간 초과 본문
요청을 보내는 동안 세션 내에서 시간 초과를 사용하는 방법을 배우려고 합니다. 아래에서 시도한 방법은 웹 페이지의 콘텐츠를 가져올 수 있지만이 문서에서 시간 초과 사용법을 찾을 수 없기 때문에 이것이 올바른 방법인지 확실하지 않습니다.
import requests
link = "https://stackoverflow.com/questions/tagged/web-scraping"
with requests.Session() as s:
r = s.get(link,timeout=5)
print(r.text)
세션 내에서 타임아웃을 사용하려면 어떻게 해야 하나요?
서버에 요청을 보낼 때 서버가 응답하는 데 시간이 너무 오래 걸리는 경우 시간 초과 오류가 발생할 수 있습니다. 네트워크 문제, 서버 부하, 느린 코드 실행 등 다양한 이유로 인해 발생할 수 있습니다. 이 가이드에서는 요청을 보내는 동안 세션 내에서 발생하는 시간 초과 오류를 해결하는 방법을 살펴봅니다.
세션 시간 초과란 무엇인가요?
세션 시간 초과란 비활성 상태로 인해 서버가 세션을 종료할 때 발생합니다. 이는 클라이언트가 지정된 기간 동안 요청을 보내지 않을 때 발생할 수 있으며 서버는 클라이언트가 더 이상 활동하지 않는 것으로 간주합니다. 세션 시간 제한은 서버 리소스를 절약하고 보안 문제를 방지하기 위해 설계되었습니다.
세션 시간 초과 오류 문제 해결
요청을 보내는 동안 세션 시간 초과 오류가 발생하는 경우 문제를 해결하기 위해 취할 수 있는 몇 가지 단계는 다음과 같습니다:
네트워크 연결을 확인합니다: 네트워크 연결에 문제가 있는 경우 세션 시간 초과가 발생할 수 있습니다. 안정적이고 빠른 연결 상태인지, 지연을 유발할 수 있는 네트워크 문제가 없는지 확인하세요.
시간 초과 제한 늘리기: 서버가 응답하는 데 너무 오래 걸리는 경우 시간 초과 제한을 늘려야 할 수 있습니다. 세션 객체를 만들 때 시간 제한 매개변수를 설정하면 됩니다. 예를 들어 Python에서는 다음과 같이 시간 초과 매개 변수를 설정할 수 있습니다:
import requests
session = requests.Session()
session.timeout = 10 # Set the timeout to 10 seconds
코드를 최적화하세요: 코드 실행 속도가 느리면 세션 시간 초과 오류가 발생할 수도 있습니다. 코드가 최적화되어 있고 불필요한 지연을 일으키지 않는지 확인하세요.
서버 상태를 확인합니다: 세션 시간 초과 오류가 계속 발생하면 서버 상태를 확인하여 서버 측에 문제가 있는지 확인하세요. 서버 관리자에게 문의하여 자세한 정보를 알아볼 수도 있습니다.
결론
세션 시간 초과 오류는 실망스러울 수 있지만 올바른 문제 해결 단계를 통해 문제를 파악하고 해결할 수 있습니다. 네트워크 연결을 확인하고, 시간 초과 제한을 늘리고, 코드를 최적화하고, 서버 상태를 확인하면 시간 초과 오류의 위험을 최소화하고 요청을 원활하게 처리할 수 있습니다.
문서 - 빠른 시작을 참조하세요.
시간 초과 매개변수를 사용하여 주어진 시간(초) 후에 응답 대기를 중지하도록 요청에 지시할 수 있습니다. 거의 모든 프로덕션 코드는 거의 모든 요청에서 이 매개변수를 사용해야 합니다.
requests.get('https://github.com/', timeout=0.001)
또는 고급 사용 설명서에서 두 가지 값(연결 및 읽기 시간 제한)을 설정할 수 있습니다.
시간 제한 값은 연결 및 읽기 시간 제한 모두에 적용됩니다. 값을 별도로 설정하려면 튜플을 지정하세요:
r = requests.get('https://github.com', timeout=(3.05, 27))
세션 전체 타임아웃 만들기
문서 전체를 검색해 보니 세션 전체에 타임아웃 매개변수를 설정할 수 없는 것 같습니다.
하지만 다음과 같이 사용할 수 있는 HTTPAdapter로 해결 방법을 제공하는 GitHub 이슈가 열렸습니다(타임아웃 옵션을 필수로 설정하거나 기본값으로 설정하는 것을 고려하세요):
import requests
from requests.adapters import HTTPAdapter
class TimeoutHTTPAdapter(HTTPAdapter):
def __init__(self, *args, **kwargs):
if "timeout" in kwargs:
self.timeout = kwargs["timeout"]
del kwargs["timeout"]
super().__init__(*args, **kwargs)
def send(self, request, **kwargs):
timeout = kwargs.get("timeout")
if timeout is None and hasattr(self, 'timeout'):
kwargs["timeout"] = self.timeout
return super().send(request, **kwargs)
And mount on a requests.Session()
s = requests.Session()
s.mount('http://', TimeoutHTTPAdapter(timeout=5)) # 5 seconds
s.mount('https://', TimeoutHTTPAdapter(timeout=5))
...
r = s.get(link)
print(r.text)
or similarly you can use the proposed EnhancedSession by @GordonAitchJay
with EnhancedSession(5) as s: # 5 seconds
r = s.get(link)
print(r.text)