Python 개발자가 요청을 좋아하는 이유
2011년 Requests 최초 릴리스 당시 urllib3은 상위 수준 HTTP 라이브러리를 선택했으며 Requests는 실제로 이를 종속성으로 사용합니다. urllib3에 별이 2.7k에 불과하다는 점을 감안할 때 개발자가 Python이 몇 가지 코드 예제를 통해 요청 대신 요청을 선택하는 이유를 살펴보겠습니다.
urllib3 documentation에서 찾은 예제를 기반으로 하고 요청을 사용하여 각 예제를 다시 만듭니다.
GET 요청하기
urllib3:
import urllib3
http = urllib3.PoolManager()
resp = http.request("GET", "http://httpbin.org/robots.txt")
resp.status
200
resp.data
b'User-agent: *\nDisallow: /deny\n'
요청:
import requests
resp = requests.get("http://httpbin.org/robots.txt")
resp.status_code
200
res.text
'User-agent: *\nDisallow: /deny\n'
POST 요청하기(양식 데이터)
urllib3:
import urllib3
http = urllib3.PoolManager()
resp = http.request(
"POST",
"https://httpbin.org/post",
fields={"hello": "world"}
)
print(resp.data)
요청:
import requests
resp = requests.post(
"https://httpbin.org/post",
data={"hello": "world"}
)
print(res.text)
POST 요청하기(JSON 데이터)
urllib3:
import json
import urllib3
data = {"attribute": "value"}
# Encoding the data in JSON format.
encoded_data = json.dumps(data).encode("utf-8")
http = urllib3.PoolManager()
resp = http.request(
"POST",
"https://httpbin.org/post",
body=encoded_data, # Embedding JSON data into request body.
headers={"Content-Type": "application/json"}
)
json.loads(resp.data.decode("utf-8"))
요청:
import requests
resp = requests.post('https://httpbin.org/post',
json={"attribute": "value"}
)
resp.json()
urllib3와의 차이점
여기서 한 가지 분명한 차이점은 요청을 하기 위해 더 이상 PoolManager를 만들 필요가 없다는 것입니다. 각 스크립트에 대해 이것을 정의해야 하는 것은 지루할 수 있으므로 요청은 이를 제거합니다. 이상하게도 urllib3 docs state 이 작업을 수행하는 데 도움이 되는 최상위 urllib3.request()가 있지만 버전 1.26.6으로 테스트할 때 예제가 작동하지 않는 것 같습니다.
HTTP 메소드
여기서 주요 차이점은 간단하지만 궁극적으로 요청을 훨씬 더 쉽게 작업할 수 있게 해주는 HTTP 메서드 인터페이스입니다. 유한한 양HTTP request methods만 있으므로 클라이언트의 모든 기능일 수도 있습니다. 또한 작업하기에 매우 Pythonic하게 만듭니다. 이 URL에서 GET을 호출하고 싶기 때문에 URL을 .get()에 대한 인수로 제공합니다. 간단합니다. 알려진 메소드를 호출하여 메소드 유형을 인수로 제공하지 않는다는 점을 감안할 때 여기에서 실수의 가능성이 적습니다. urllib3와 비교할 때 코드를 매우 아름답게 단순하게 만드는 것은 이 인터페이스입니다.
내장 JSON 인코딩/디코딩
또 다른 차이점은 요청이 JSON 인코딩/디코딩을 처리한다는 것입니다. JSON 서비스와 대화할 때 우리가 많이 하게 될 일반적인 작업입니다. 모든 개발자가 작성하기에 충분히 간단하지만 라이브러리를 사용하는 모든 개발자가 스스로 해야 한다는 점을 감안할 때 성가신 일입니다. 우리 프로젝트를 어지럽히는 모든 utils.py 파일에는 몇 가지 기능이 적습니다. 결과적으로 최종 예제가 얼마나 더 단순해졌는지 보십시오. 모든 찌꺼기가 사라졌습니다!
결론
물론 다른 HTTP 클라이언트도 사용할 수 있으며 특정 사용 사례에 따라 더 적합할 수도 있습니다. 요청이 들어왔기 때문에 다른 라이브러리(예: asynchronous httpx )도 동일한 단순하고 우아한 API를 채택했습니다.
Requests는 Python용 HTTP 클라이언트 게임에서 확실히 승리했으며 우리는 Python을 제공하는 Requests가 아니더라도 친숙한 간단한 인터페이스를 더 오랫동안 사용할 것입니다.
Reference
이 문제에 관하여(Python 개발자가 요청을 좋아하는 이유), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/iwootten/why-python-devs-love-requests-11j2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)