파이썬 요청의 응답을 읽으려면 어떻게 해야 합니까?
파이썬 스크립트가 두 개 있습니다.하나는 Urllib2 라이브러리를 사용하고 다른 하나는 Requests 라이브러리를 사용합니다.
구현하기 쉬운 요청을 찾았지만 urlib2에 해당하는 요청을 찾을 수 없습니다.read()
기능.예:
...
response = url.urlopen(req)
print response.geturl()
print response.getcode()
data = response.read()
print data
일단 내 게시물 URL을 작성하면,data = response.read()
컨텐츠를 제공합니다. vmoveldirector api 인스턴스에 연결하려고 하는데 액세스할 수 있는 엔드포인트가 응답에 표시됩니다.하지만 요청 라이브러리를 다음과 같이 사용하면...
....
def post_call(username, org, password, key, secret):
endpoint = '<URL ENDPOINT>'
post_url = endpoint + 'sessions'
get_url = endpoint + 'org'
headers = {'Accept':'application/*+xml;version=5.1', \
'Authorization':'Basic '+ base64.b64encode(username + "@" + org + ":" + password), \
'x-id-sec':base64.b64encode(key + ":" + secret)}
print headers
post_call = requests.post(post_url, data=None, headers = headers)
print post_call, "POST call"
print post_call.text, "TEXT"
print post_call.content, "CONTENT"
post_call.status_code, "STATUS CODE"
....
....그print post_call.text
그리고.print post_call.content
는 호출 후 요청에서 상태 코드가 200과 동일하더라도 아무것도 반환하지 않습니다.
요청의 응답이 텍스트 또는 내용을 반환하지 않는 이유는 무엇입니까?
요청에 Urlib2의 요청과 일치하지 않습니다.read()
.
>>> import requests
>>> response = requests.get("http://www.google.com")
>>> print response.content
'<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage"><head>....'
>>> print response.content == response.text
True
POST 요청이 내용을 반환하지 않는 것 같습니다.이는 종종 POST 요청의 경우에 해당합니다.쿠키를 만들었나요?상태 코드는 POST가 성공했음을 알려줍니다.
Python 3용 편집:
이제 Python은 데이터 유형을 다르게 처리합니다. response.content
의 시퀀스를 반환합니다.bytes
(ASCII를 나타내는 정수) 동안response.text
이다.string
(문자 순서).
따라서,
>>> print response.content == response.text
False
>>> print str(response.content) == response.text
True
응답이 json이면 (python3)과 같은 작업을 수행할 수 있습니다.
import json
import requests as reqs
# Make the HTTP request.
response = reqs.get('https://demo.ckan.org/api/3/action/group_list')
# Use the json module to load CKAN's response into a dictionary.
response_dict = json.loads(response.text)
for i in response_dict:
print("key: ", i, "val: ", response_dict[i])
사용할 수 있는 응답의 모든 내용을 보려면.__dict__
:
print(response.__dict__)
예를 들어 이미지를 일부 API에 푸시하고 결과 주소(응답)를 반환하려면 다음 작업을 수행할 수 있습니다.
import requests
url = 'https://uguu.se/api.php?d=upload-tool'
data = {"name": filename}
files = {'file': open(full_file_path, 'rb')}
response = requests.post(url, data=data, files=files)
current_url = response.text
print(response.text)
응답이 Json에 있으면 Python3에서 아래 방법을 직접 사용할 수 있습니다.json import
그리고.json.loads()
방법:
response.json()
사용자가 받은 응답의 내용을 얻는 방법은 세 가지가 있습니다.
- 내용 - (
response.content
) - 같은 라이브러리beautifulsoup
입력을 이진수로 수락 - JSON(
response.json()
) - 대부분의 API 호출은 이 형식으로만 응답합니다. - 텍스트(
response.text
) - 정규식 기반 검색 또는 파일에 데이터를 덤프하는 등 모든 용도에 사용됩니다.
스크랩하는 웹 페이지 유형에 따라 속성을 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/18810777/how-do-i-read-a-response-from-python-requests
'programing' 카테고리의 다른 글
모듈로(%) 연산자는 파이썬에서 음수에서 어떻게 작동합니까? (0) | 2023.07.17 |
---|---|
'com.repository' 유형의 빈을 정의합니다.구성의 '사용자 리포지토리' (0) | 2023.07.17 |
TypeScript에서 함수 인터페이스를 구현할 수 있습니까? (0) | 2023.07.07 |
커서에서 '업데이트 대기'를 언제 사용해야 합니까? (0) | 2023.07.07 |
container-registry.oracle.com/database/enterprise 에 대해 꺼내기 액세스가 거부되었습니다. (0) | 2023.07.07 |