programing

urllib, urllib2, urllib3 및 요청 모듈의 차이점은 무엇인가?

prostudy 2022. 3. 12. 10:37
반응형

urllib, urllib2, urllib3 및 요청 모듈의 차이점은 무엇인가?

Python에서 , , 및 모듈의 차이점은 무엇인가?왜 3개야?그들은 같은 일을 하는 것 같다...

이미 말해진 거 알지만 파이톤 패키지를 적극 추천하고 싶다.

비단뱀이 아닌 다른 언어를 써본 적이 있다면 아마 그런 생각을 하고 있을 겁니다.urllib그리고urllib2사용하기 쉽고, 코드도 별로 없고, 능력도 뛰어나서, 그게 내가 생각하던 방식이야.하지만 더requests패키지는 믿을 수 없을 정도로 유용하고 짧아서 모두가 그것을 사용해야 한다.

첫째, 완전히 휴식하는 API를 지원하며, 다음과 같이 쉽다.

import requests

resp = requests.get('http://www.mywebsite.com/user')
resp = requests.post('http://www.mywebsite.com/user')
resp = requests.put('http://www.mywebsite.com/user/put')
resp = requests.delete('http://www.mywebsite.com/user/delete')

GET/POST와 상관없이 파라미터를 다시 인코딩할 필요가 없으며, 사전만 논쟁으로 삼을 뿐이고 다음 단계로 넘어가도 좋다.

userdata = {"firstname": "John", "lastname": "Doe", "password": "jdoe123"}
resp = requests.post('http://www.mywebsite.com/user', data=userdata)

I JSON Decoder)도 내장되어 있다(Angain, I know JSON Decoder(Angain, I know)json.loads()글을 쓰는 것이 더 많은 것은 아니지만, 이것은 확실히 편리하다.

resp.json()

또는 응답 데이터가 텍스트일 경우 다음을 사용하십시오.

resp.text

이것은 빙산의 일각에 불과하다.요청 사이트의 기능 목록:

  • 국제 도메인 및 URL
  • Keep-Alive & Connection Pooling
  • 쿠키 지속성이 있는 세션
  • 브라우저 유형 SSL 검증
  • 기본/기록 인증
  • 우아한 키/값 쿠키
  • 자동 압축 해제
  • 유니코드 응답 본문
  • 멀티파트 파일 업로드
  • 연결 시간 초과
  • .netrc 지원
  • 목록 항목
  • Python 2.7, 3.6—3.9
  • 나사산이 안전하다.

즉, urllib2는 몇 가 지 가가 인데 기, ,.urlopen()함수를 사용하면 헤더를 지정할 수 있다(과거 httplib를 사용해야 했던 경우, 훨씬 상세함). 더 한 것은,는 urllib2를 하는 것이다.Request(class). 이는 요청을 수행하는 데 보다 선언적인 접근 방식을 허용한다.

r = Request(url='http://www.mysite.com')
r.add_header('User-Agent', 'awesome fetcher')
r.add_data(urllib.urlencode({'foo': 'bar'})
response = urlopen(r)

:urlencode()urllib2가 .

urllib2에는 보다 고급 URL 지원을 구현하기 위한 핸들러도 있다.즉, 레거시 코드를 사용하지 않는 한 urlib2의 URL opener를 사용하고자 할 수 있지만, 유틸리티 기능 중 일부는 urlib로 가져와야 한다.

보너스 답변 구글 앱엔진과 함께 httplib, urllib 또는 urllib2 중 아무거나 사용할 수 있지만 모두 구글의 URL Fetch API용 포장지에 불과하다.즉, 당신은 여전히 포트, 프로토콜, 그리고 허용된 응답 길이와 같은 제한을 받고 있다.그러나 HTTP URL을 검색할 때 예상되는 대로 라이브러리의 핵심을 사용할 수 있다.

이것이 다양한 "urllibs"들 사이의 관계에 대한 나의 이해다.

Python 2 표준 라이브러리에는 두 개의 HTTP 라이브러리가 나란히 존재한다.비슷한 이름에도 불구하고, 그들은 다른 디자인과 다른 구현을 가지고 있다.

  • urllib Python 1.2의 표준 라이브러리에 추가된 원래의 Python HTTP 클라이언트였습니다.이전 문서:urllibPython 1.4에서 찾을 수 있다.

  • urllib2 Python 1.6에 추가된 보다 유능한 HTTP 클라이언트로, 대체용으로 사용됨urllib:

    urllib2 - 새 버전과 개선되었지만 호환되지 않는 urllib(여전히 실험적이다)

    (이서문헌재:urllib2Python 2.1에서 찾을 수 있다.

Python 3 표준 라이브러리는 이전 모듈의 병합/거부/재작성 버전인 새로운 버전을 가지고 있다.

urllib3 타사 패키지(즉, CPython의 표준 라이브러리가 아님)이름에도 불구하고 표준도서관 패키지와는 무관하며, 향후 표준도서관에 포함시킬 의사가 없다.

마지막으로, 내부적으로 사용urllib3, 그러나 그것은 사용하기 쉬운 API를 목표로 한다.

urlliburllib2는 모두 Python 모듈로서 URL 요청 관련 일을 하지만 다른 기능을 제공한다.

1) urllib2는 Request 객체를 수락하여 URL 요청에 대한 헤더를 설정할 수 있으며, urllib는 URL만 수락한다.

2) urllib는 GET 쿼리 문자열 생성에 사용되는 urlencode 방법을 제공하며, urllib2에는 그러한 기능이 없다.이것이 urllib2와 함께 urllib를 자주 사용하는 이유 중 하나이다.

Requests - Requests'는 Python으로 작성된 간단하고 사용하기 쉬운 HTTP 라이브러리다.

1) Python Requests는 매개 변수를 자동으로 인코딩하여 전달하기 전에 urllib.encode() 방법을 사용하여 매개 변수를 인코딩해야 하는 urllib.encode()의 경우와 달리 간단한 인수로 전달하면 된다.

2)응답기를유니코드로 자동 해독한다.

3) 또한 요청은 오류 처리가 훨씬 편리하다.인증에 실패하면 urllib2가 urllib2를 올린다.URLError, Requests가 정상 응답 개체를 반환하는 동안 예상대로.요청이 boolean response.ok에 의해 성공했는지를 확인하십시오.

기존 답변만 덧붙이자면, 파이썬 요청이 네이티브 라이브러리가 아니라고 언급하는 사람은 없는 것 같다.종속성을 추가하는 것이 괜찮다면 요청해도 괜찮다.그러나 의존성 추가를 피하려고 한다면 urllib는 이미 이용 가능한 네이티브 파이선 라이브러리다.

상당한 차이점은 Python2를 Python3에 포팅하는 것이다.urllib2는 python3에 존재하지 않으며 그 방법은 urllib에 포팅되어 있다.그래서 당신은 그것을 많이 사용하고 있고 미래에 Python3로 이주하기를 원하니 urllib를 사용하는 것을 고려해보라.그러나 2to3 툴은 자동으로 대부분의 작업을 수행할 것이다.

는 저것을 .urllib.urlencode기능, 그리고 그것은 에 존재하지 않는 것 같다.urllib2.

>>> urllib.urlencode({'abc':'d f', 'def': '-!2'})
'abc=d+f&def=-%212'

나는 모든 대답이 꽤 좋다고 생각한다.그러나 urllib3.urllib3에 대한 세부사항의 감소는 python을 위한 매우 강력한 HTTP 클라이언트다.다음 두 명령을 모두 설치하려면

urllib3

pip을 사용해서,

pip install urllib3

아니면 Github로부터 최신 코드를 받아서 설치하면 된다.

$ git clone git://github.com/urllib3/urllib3.git
$ cd urllib3
$ python setup.py install

그럼 갈 준비가 되셨군요

urllib3를 가져오면

import urllib3

여기서 직접 연결을 생성하는 대신 요청을 하려면 PoolManager 인스턴스가 필요할 것이다.이것은 당신을 위해 연결 풀링과 스레드 안전을 처리한다.HTTP/HTTPS 프록시를 통한 요청 라우팅에 대한 ProxyManager 개체도 있음 여기서 설명서를 참조하십시오.사용 예:

>>> from urllib3 import PoolManager
>>> manager = PoolManager(10)
>>> r = manager.request('GET', 'http://google.com/')
>>> r.headers['server']
'gws'
>>> r = manager.request('GET', 'http://yahoo.com/')
>>> r.headers['server']
'YTS/1.20.0'
>>> r = manager.request('POST', 'http://google.com/mail')
>>> r = manager.request('HEAD', 'http://google.com/calendar')
>>> len(manager.pools)
2
>>> conn = manager.connection_from_host('google.com')
>>> conn.num_requests
3

에 언급된 바와 같이urrlib3문헌화,urllib3Python 표준 라이브러리에서 누락된 많은 중요한 기능을 가져오십시오.

  • 나사산 안전.
  • 연결 풀링.
  • 클라이언트측 SSL/TLS 확인
  • 다중 아트 인코딩을 사용한 파일 업로드.
  • 요청 재시도 및 HTTP 리디렉션 처리를 위한 도우미.
  • gzip 및 감압 인코딩 지원.
  • HTTP 및 SOCKS에 대한 프록시 지원.
  • 100% 테스트 적용 범위.

자세한 내용은 사용자 안내서를 따르십시오.

requests

요청에서 사용urllib3에서는 보다 더 수 있다.requests데이터를 검색하십시오. keep-alive는 % 자동이다.urllib3그렇지 않은 곳에 말이야또한 응답 수신인처럼 이벤트가 트리거될 때 콜백 기능을 호출하는 이벤트 후크를 가지고 있다.requests, 각 요청 형식은 고유의 기능을 가지고 있다.따라서 연결이나 풀을 생성하는 대신 직접 URL을 얻으십시오.


설치용requestspip 사용 just run

pip install requests

아니면 그냥 소스 코드에서 설치할 수도 있고

$ git clone git://github.com/psf/requests.git
$ cd requests
$ python setup.py install

그러면.import requests

여기에서 공식 문서를 참조하십시오. 세션 개체, SSL 검증 및 이벤트 후크 같은 고급 용도에 대해서는 이 URL을 참조하십시오.

URL의 내용을 가져오려면:

try: # Try importing requests first.
    import requests
except ImportError: 
    try: # Try importing Python3 urllib
        import urllib.request
    except AttributeError: # Now importing Python2 urllib
        import urllib


def get_content(url):
    try:  # Using requests.
        return requests.get(url).content # Returns requests.models.Response.
    except NameError:  
        try: # Using Python3 urllib.
            with urllib.request.urlopen(index_url) as response:
                return response.read() # Returns http.client.HTTPResponse.
        except AttributeError: # Using Python3 urllib.
            return urllib.urlopen(url).read() # Returns an instance.

Python2와 Python3를 쓰기가 어렵고request응답에 대한 종속성 코드(응용성 코드: 응답)urlopen()기능 및requests.get()함수 반환 다른 유형:

  • 파이톤2urllib.request.urlopen()a를 반환하다http.client.HTTPResponse
  • 파이톤3urllib.urlopen(url)a를 반환하다.instance
  • 부탁한다request.get(url)a를 반환하다requests.models.Response

일반적으로 urllib2를 사용해야 하는데, 이는 Request 객체를 수락함으로써 때때로 상황을 좀 더 쉽게 만들고 프로토콜 오류에 대한 URLException을 발생시키기도 하기 때문이다.하지만 구글 앱 엔진에서는 둘 다 사용할 수 없다.구글이 샌드박스형 파이썬 환경에서 제공하는 URL Fetch API를 사용해야 한다.

위의 답변에서 누락된 핵심 사항은 urllib가 유형 물체를 반환한다는 것이다.<class http.client.HTTPResponse>반면에requests돌아온다<class 'requests.models.Response'>.

이 때문에 읽기() 방법은 다음과 같이 사용할 수 있다.urllib에 대해서는 그렇지 않다.requests.

추신:requests이미 너무 많은 방법들로 풍부해서 거의 더 이상의 방법은 필요하지 않다.read();>

참조URL: https://stackoverflow.com/questions/2018026/what-are-the-differences-between-the-urllib-urllib2-urllib3-and-requests-modul

반응형