programing

파이썬 요청의 응답을 읽으려면 어떻게 해야 합니까?

cafebook 2023. 7. 17. 21:24
반응형

파이썬 요청의 응답을 읽으려면 어떻게 해야 합니까?

파이썬 스크립트가 두 개 있습니다.하나는 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()

사용자가 받은 응답의 내용을 얻는 방법은 세 가지가 있습니다.

  1. 내용 - (response.content) - 같은 라이브러리beautifulsoup입력을 이진수로 수락
  2. JSON(response.json()) - 대부분의 API 호출은 이 형식으로만 응답합니다.
  3. 텍스트(response.text) - 정규식 기반 검색 또는 파일에 데이터를 덤프하는 등 모든 용도에 사용됩니다.

스크랩하는 웹 페이지 유형에 따라 속성을 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/18810777/how-do-i-read-a-response-from-python-requests

반응형