파이썬에서 HTTP GET으로 가는 가장 빠른 방법은 무엇입니까?
내용이 문자열인 것을 알고 있다면 Python에서 HTTP GET으로 가는 가장 빠른 방법은 무엇입니까?다음과 같은 간단한 원라이너를 찾고 있습니다.
contents = url.get("http://example.com/foo/bar")
하지만 구글에서 찾을 수 있는 건httplib
그리고.urllib
숏컷을 라이브러리에서 찾을 수 없습니다.
표준 Python 2.5에는 위와 같은 숏컷이 있나요, 아니면 함수를 작성해야 하나요?url_get
?
- 나는 포격의 결과물을 포착하고 싶지 않다.
wget
또는curl
.
Python 3:
import urllib.request
contents = urllib.request.urlopen("http://example.com/foo/bar").read()
Python 2:
import urllib2
contents = urllib2.urlopen("http://example.com/foo/bar").read()
및 매뉴얼
요청 라이브러리 사용:
import requests
r = requests.get("http://example.com/foo/bar")
그런 다음 다음과 같은 작업을 수행할 수 있습니다.
>>> print(r.status_code)
>>> print(r.headers)
>>> print(r.content) # bytes
>>> print(r.text) # r.content as str
다음 명령을 실행하여 설치 요청:
pip install requests
httplib2를 사용하는 솔루션을 oneliner로 하려면 익명 Http 개체를 인스턴스화하는 것을 고려하십시오.
import httplib2
resp, content = httplib2.Http().request("http://example.com/foo/bar")
httplib2를 보세요.이것은, 매우 편리한 기능 외에, 당신이 원하는 것을 제공합니다.
import httplib2
resp, content = httplib2.Http().request("http://example.com/foo/bar")
여기서 content는 응답 본문(문자열)이며 response에는 상태 및 응답 헤더가 포함됩니다.
표준 Python 설치에는 포함되어 있지 않지만(단, 표준 Python만 필요), 확실히 확인해 볼 가치가 있습니다.
파워풀한 테크놀로지로 충분히 심플하게urllib3
도서관.
다음과 같이 Import합니다.
import urllib3
http = urllib3.PoolManager()
그리고 다음과 같은 요청을 합니다.
response = http.request('GET', 'https://example.com')
print(response.data) # Raw data.
print(response.data.decode('utf-8')) # Text.
print(response.status) # Status code.
print(response.headers['Content-Type']) # Content type.
머리글을 추가할 수도 있습니다.
response = http.request('GET', 'https://example.com', headers={
'key1': 'value1',
'key2': 'value2'
})
자세한 내용은 urlib3 매뉴얼을 참조하십시오.
urllib3
빌트인보다 훨씬 안전하고 사용하기 쉽다urllib.request
또는http
안정적입니다.
실제로 Python에서는 파일 등에서 HTTP 응답을 읽을 수 있습니다.여기 API에서 JSON을 읽는 예가 있습니다.
import json
from urllib.request import urlopen
with urlopen(url) as f:
resp = json.load(f)
return resp['some_key']
이 솔루션은 더 이상 Import를 필요로 하지 않고 (나에게는) 기능합니다.또, https:
try:
import urllib2 as urlreq # Python 2.x
except:
import urllib.request as urlreq # Python 3.x
req = urlreq.Request("http://example.com/foo/bar")
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36')
urlreq.urlopen(req).read()
헤더 정보에 "User-Agent"를 지정하지 않으면 내용을 파악하는 데 어려움이 있을 수 있습니다.그러면 보통 다음과 같은 방법으로 요청이 취소됩니다.urllib2.HTTPError: HTTP Error 403: Forbidden
또는urllib.error.HTTPError: HTTP Error 403: Forbidden
.
헤더를 송신하는 방법
Python 3:
import urllib.request
contents = urllib.request.urlopen(urllib.request.Request(
"https://api.github.com/repos/cirosantilli/linux-kernel-module-cheat/releases/latest",
headers={"Accept" : 'application/vnd.github.full+json"text/html'}
)).read()
print(contents)
Python 2:
import urllib2
contents = urllib2.urlopen(urllib2.Request(
"https://api.github.com",
headers={"Accept" : 'application/vnd.github.full+json"text/html'}
)).read()
print(contents)
wget을 위한 컨트롤러의 솔루션은 매우 유용하지만 다운로드 과정 전체에 걸쳐 진행 상황을 출력하지 않는다는 것을 알게 되었습니다.정형화된 인쇄물 뒤에 한 줄만 더하면 완벽합니다.
import sys, urllib
def reporthook(a, b, c):
print "% 3.1f%% of %d bytes\r" % (min(100, float(a * b) / c * 100), c),
sys.stdout.flush()
for url in sys.argv[1:]:
i = url.rfind("/")
file = url[i+1:]
print url, "->", file
urllib.urlretrieve(url, file, reporthook)
print
다음은 Python의 wget 스크립트입니다.
# From python cookbook, 2nd edition, page 487
import sys, urllib
def reporthook(a, b, c):
print "% 3.1f%% of %d bytes\r" % (min(100, float(a * b) / c * 100), c),
for url in sys.argv[1:]:
i = url.rfind("/")
file = url[i+1:]
print url, "->", file
urllib.urlretrieve(url, file, reporthook)
print
낮은 수준의 API를 원하는 경우:
import http.client
conn = http.client.HTTPSConnection('example.com')
conn.request('GET', '/')
resp = conn.getresponse()
content = resp.read()
conn.close()
text = content.decode('utf-8')
print(text)
뛰어난 솔루션 Xuan, Theler.
python 3에서 작동하려면 다음과 같이 변경하십시오.
import sys, urllib.request
def reporthook(a, b, c):
print ("% 3.1f%% of %d bytes\r" % (min(100, float(a * b) / c * 100), c))
sys.stdout.flush()
for url in sys.argv[1:]:
i = url.rfind("/")
file = url[i+1:]
print (url, "->", file)
urllib.request.urlretrieve(url, file, reporthook)
print
또한 입력한 URL 앞에 "http://"가 와야 합니다. 그렇지 않으면 알 수 없는 URL 유형 오류가 반환됩니다.
특히 HTTP API를 사용하는 경우 Nap과 같은 보다 편리한 선택사항이 있습니다.
예를 들어 2014년 5월 1일 이후 Github에서 Gists를 얻는 방법은 다음과 같습니다.
from nap.url import Url
api = Url('https://api.github.com')
gists = api.join('gists')
response = gists.get(params={'since': '2014-05-01T00:00:00Z'})
print(response.json())
기타 예: https://github.com/kimmobrunfeldt/nap#examples
★★★의 python >= 3.6
dload를 사용할 수 있습니다.
import dload
t = dload.text(url)
★★★의 json
:
j = dload.json(url)
★★★★★★★★★★★★★★★★★★:
pip install dload
언급URL : https://stackoverflow.com/questions/645312/what-is-the-quickest-way-to-http-get-in-python
'programing' 카테고리의 다른 글
PHP - 문자열에서 숫자가 아닌 모든 문자 제거 (0) | 2022.11.07 |
---|---|
PHP의 명령줄 암호 프롬프트 (0) | 2022.11.07 |
JavaScript의 날짜로 문자열 구문 분석 (0) | 2022.11.07 |
Python 문자열에 단어가 있는지 확인합니다. (0) | 2022.11.07 |
PHP 스크립트에 대한 동시 요청 (0) | 2022.11.07 |