HTTPX: Python HTTP의 미래 구축 지원
인코딩 / httpx
Python의 차세대 HTTP 클라이언트입니다.🦋
HTTPX-Python의 차세대 HTTP 클라이언트입니다.
HTTPX는 Python 3의 기능을 모두 갖춘 HTTP 클라이언트로 동기식 및 비동기식 API를 제공하고 HTTP/1.1 및 HTTP/2를 지원합니다.
참고: 테스트 버전에서는 HTTPX를 고려해야 합니다.우리는 우리가 이미 공공 API가 왔다고 믿는다
현재는 안정점이지만 의존항을
0.16.*
로 고정하는 것을 강력히 권장합니다정확하게 복습할 수 있도록 발표API changes between package updates.1.0 버전은 2021에 출시될 예정이다.
우리 시작합시다...
>>> import httpx >>> r = httpx.get('https://www.example.org/') >>> r <Response [200 OK]> >>> r.status_code 200 >>> r.headers['content-type'] 'text/html; charset=UTF-8' >>> r.text '<!doctype html>\n<html>\n<head>\n<title>Example Domain</title>...'
Or, using the async API...
Use IPython or Python 3.8+ with python -m asyncio
to try this code interactively.
>>> import httpx
>>> async with httpx.AsyncClient() as client
...
…
HTTPX 🦋 is a next generation HTTP client for Python. It is Requests-compatible, supports HTTP/2 and HTTP/1.1, has async support, and an ever-expanding community of 35+ awesome contributors. ❤
HTTPX is part of a growing ecosystem of async-capable Python projects lead by the Encode organization (which backs the Django REST Framework). Some of the most notable projects include Uvicorn, Starlette, and Databases.
Hacktoberfest started yesterday, and on behalf of the HTTPX maintenance team I can say we're very excited to be part of it this year!
Before getting to the contributing guide, a short preview of what HTTPX can do…
Your first request to dev.to using HTTPX:
>>> import httpx
>>> r = httpx.get('https://dev.to')
>>> r.status_code
200
>>> r.headers['content-type']
'text/html; charset=utf-8'
>>> r.text[:50]
'<!DOCTYPE html>\n<html lang="en">\n <head>\n <met'
>>> r.http_version
'HTTP/1.1'
개발자는 HTTP/2를 지원합니까?>>> import httpx
>>> # The top-level API only supports HTTP/1.1 for efficiency reasons,
>>> # but 'Client' uses HTTP/2 by default.
>>> with httpx.Client() as client:
... r = client.get('https://dev.to')
...
>>> r.http_version
'HTTP/2' # YAY! 🎉
HTTPX는 파이썬 네트워크 응용 프로그램(WSGI+ASGI)도 호출할 수 있습니다.플라스크 예시...>>> from flask import Flask
>>> import httpx
>>> app = Flask(__name__)
>>> @app.route("/")
... def hello():
... return "Hello, world"
...
>>> with httpx.Client(app=app, base_url='http://testserver') as client:
... r = client.get('/')
...
>>> r.status_code
200
>>> r.text
'Hello, world' # Tada! 🦋
>>>
지원 async/await
!IPython REPL을 시작하여 다음을 시도해 보겠습니다.In [1]: import httpx
In [2]: import asyncio
In [3]: # We're going to fetch tag pages concurrently...
In [4]: async def fetch(tag, client):
...: return await client.get(f'https://dev.to/t/{tag}')
...:
In [5]: async with httpx.AsyncClient() as client:
...: responses = await asyncio.gather(
...: fetch('hacktoberfest', client),
...: fetch('python', client),
...: fetch('opensource' client),
...: )
In [6]: responses
Out[6]: [<Response [200 OK]>, <Response [200 OK]>, <Response [200 OK]>]
In [7]: [r.url for r in responses]
Out[7]:
[URL('https://dev.to/t/hacktoberfest'),
URL('https://dev.to/t/python'),
URL('https://dev.to/t/opensource')]
(이 예에서 사용asyncio
, 그러나 사용 trio
is also supported!)HTTPX는 이미 많은 기능을 내장하고 있지만, 그 중 일부 분야는 여전히 더 많은 작업을 필요로 하기 때문에 알파 단계에 있다.
이것은 우리가 파이썬 HTTP의 미래를 구축하는 데 도움을 줄 수 있는 충분한 소개이다.
너는 어떻게 도울 수 있느냐
해봐!
HTTPX의 발전을 지원하는 가장 직접적인 방법은 직접 시도하는 것입니다.
예:
공헌
이 글을 쓸 때 놀라운 리스트10
hacktoberfest
-labelled issues가 있습니다. 이 모든 것을 잡을 수 있습니다!기대 많이!다음은 현재 사용 가능한 몇 가지 하이라이트입니다.
문서
문서는 모든 소프트웨어 항목에 매우 중요하다.이 기능은 새로운 사용자가 특정 기능이나 API를 어떻게 사용하는지에 대한 정보를 찾을 수 있도록 도와줍니다.
우리는 HTTPX documentation 몇 군데에서 개선이 필요하다는 것을 안다.타자, 복사, 정보 누락에 관계없이 개선할 수 있다고 생각하는 모든 내용을 마음대로 훑어보고 제출하십시오
.post()。put (), 및.API 문서의 patch() 함수에 "files" 매개 변수가 없습니다.
#409
sethmlarson
발표 날짜
클라이언트 및 비동기식 클라이언트의 경우 API docs files
, .post()
및 .patch()
에 대한 매개변수 부족 .put()
View on GitHub
환경 변수 문서는 모든 용례의 합리성을 증명해야 한다.
#404
tomchristie
발표 날짜
우리의 environment variable documentation 은 각 envvar에 대해 다음과 같은 작업 중 하나를 수행해야 하며, 각 사례에 몇 가지 이유나 배경을 포함해야 한다.
tomchristie
발표 날짜
우리의 environment variable documentation 은 각 envvar에 대해 다음과 같은 작업 중 하나를 수행해야 하며, 각 사례에 몇 가지 이유나 배경을 포함해야 한다.
HTTPX_
접두사에 대해서만 관련될 수 있음SSLKEYLOGFILE
더 많은 상하문을 제공할 수 있습니다. "keylog 파일은 디버깅 목적으로만 사용됩니다."어떻게 사용하는지, 언제 사용하는지, 어떤 디버깅 도구와 함께 사용하는지 명확하게 설명하지 않았다.SSL_CERT_FILE
및 SSL_CERT_DIR
에는 해당 문서에 대한 링크가 포함될 수 있습니다.그것들을 지원하는 다른 도구의 예를 들 수 있을까요?HTTP_PROXY
,HTTPS_PROXY
,ALL_PROXY
는 약정된 문서를 가리키는 링크를 포함할 수 있습니다.그것들을 지원하는 다른 도구의 예를 들 수 있을까요?View on GitHub
더 명확한 문서는 httpx를 설명했다.Client는 요청과 같습니다.''세션.
#403
innawe
발표 날짜
이것은 문제가 아니지만, httpx 문서를 읽고 해결 방안을 찾지 못했습니다.
요청 중, 나는 s=요청을 사용한다.session (), 어떻게 httpx를 사용하여 같은 일을 합니까?
s=httpx와 유사한 일을 할 수 있다.세션()?
다시 한 번 고맙고 죄송합니다.
View on GitHub
오류 수정
사실: 모든 소프트웨어에 버그가 있습니다.🐛, 물론 HTTPX도 예외는 아니다!
일부 오류가 추적되었는데..
호스트 헤더에userinfo 구성 요소가 포함되어 있습니다
#391
sethmlarson
발표 날짜 BaseRequest.prepare()
다음 URL을 지정하면 기본 Host
헤더가 [email protected]:123
: http://[email protected]:123
로 잘못 설정됩니다.Host
에 분배되기 전에userinfo 구성 요소를 권한에서 삭제해야 합니다.
View on GitHub
...하지만 그 중 대다수는 발견, 추적, 복구가 필요하다!
이것도 HTTPX를 시험해 보는 것이 매우 중요한 이유이다.당신의 용례는 우리가 고려한 용례가 아닐 수도 있고, 아직 고려하지 않은 상황에서일 수도 있습니다.
만약 당신이 무슨 이상한 점을 발견한다면, open an issue, 우리는 함께 조사할 것입니다!
새로운 기능
HTTPX는 이미 많은 기능을 내장하고 있지만, 우리는 어떻게 더욱 추진할 것인가에 대해 이미 생각을 가지고 있다.
다음은 당신이 해결할 수 있는 기능들입니다.만약 HTTPX를 사용해 보았지만 부족한 것이 있다면 open an issue!우리는 함께 토론할 것입니다. 만약 당신이 이 기능을 실현하고 싶다면, 우리는 기꺼이 당신이 시작하는 것을 도울 것입니다.
NO_PROXY 환경 변수에 대한 지원 추가
#360
sethmlarson
발표 날짜 NO_PROXY
환경 변수 설명은 다음과 같습니다.
sethmlarson
발표 날짜
BaseRequest.prepare()
다음 URL을 지정하면 기본 Host
헤더가 [email protected]:123
: http://[email protected]:123
로 잘못 설정됩니다.Host
에 분배되기 전에userinfo 구성 요소를 권한에서 삭제해야 합니다.View on GitHub
...하지만 그 중 대다수는 발견, 추적, 복구가 필요하다!
이것도 HTTPX를 시험해 보는 것이 매우 중요한 이유이다.당신의 용례는 우리가 고려한 용례가 아닐 수도 있고, 아직 고려하지 않은 상황에서일 수도 있습니다.
만약 당신이 무슨 이상한 점을 발견한다면, open an issue, 우리는 함께 조사할 것입니다!
새로운 기능
HTTPX는 이미 많은 기능을 내장하고 있지만, 우리는 어떻게 더욱 추진할 것인가에 대해 이미 생각을 가지고 있다.
다음은 당신이 해결할 수 있는 기능들입니다.만약 HTTPX를 사용해 보았지만 부족한 것이 있다면 open an issue!우리는 함께 토론할 것입니다. 만약 당신이 이 기능을 실현하고 싶다면, 우리는 기꺼이 당신이 시작하는 것을 도울 것입니다.
NO_PROXY 환경 변수에 대한 지원 추가
#360
sethmlarson
발표 날짜 NO_PROXY
환경 변수 설명은 다음과 같습니다.
trust_env=True
에서만 사용 가능[기능 요청]: buildin ConnectionResetError 및 ConnectionError 대신 httpx 이상을 발생시킵니다.
#349
Trim21
발표 날짜
이것은 오류 보고가 아니라 기능 요청입니다.
나는 웹 서버에서 상류api를 요청하기 위해 requests
를 사용한다.따라서 나는 중간부품의 모든 requests.RequestException
를 처리하고 502 upstream
오류를 되돌릴 수 있다.
그러나 내가 httpx
로 옮긴 후에 httpx는 http(s) 요청을 할 때 이런 이상이 없었다. 이것은 httpx.ConnectTimeout
,buildinConnectionError
과ConnectResetError
를 일으킬 것이다.마지막 두 가지 이상은 httpx
뿐만 아니라
어쩌면httpx
도 포장ConnectionError
과 다른 구축 연결 이상을 해야 하는가?
View on GitHub
생각을 끝내다
HTTPX에 기여할 수 있는 많은 방법이 있습니다. 모든 공헌을 환영합니다!질문, 문서 개선, 기능 요청, 버그 보고서를 선택하면 contributing guide부터 읽고 해킹할 수 있습니다!
이 글을 읽어 주셔서 감사합니다. 우리는 당신의 놀라운 공헌을 기대하고 있습니다.💖🦋
- HTTPX 유지 관리 팀
Reference
이 문제에 관하여(HTTPX: Python HTTP의 미래 구축 지원), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/florimondmanca/httpx-for-hacktoberfest-help-build-the-future-of-python-http-16pj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)