Requests module을 사용하여 Google 내부 프로젝트 중 하나에 대해 만든 API를 테스트합니다. 요청 모듈 자체의 결함이나 내 용도의 결함을 발견했습니다.Python 요청 모듈 및 JSON 응답
Google 데이터가 매우 민감하지 않기 때문에 API는 간단한 기본 HTTP 인증을 사용하여 액세스를 제어합니다. JSON을 데이터 형식으로 사용하고 urllib2와 HTTPBasicAuthHandler 또는 PHP 및 cURL을 사용하여 API URL을 요청할 때 올바른 형식의 JSON 문자열로 데이터를 다시 가져옵니다. 문제가 없습니다.
그러나 요청 모듈을 사용하여 동일한 요청을하면 인코딩 된 문자열이 반환되며 어떤 인코딩 유형인지 확인할 수 없습니다. 여기
\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xadZ\xfb\x8f\xd3H\x12\xfeWzG\xab;\x90
내가이 문제를 재현하는 요청과 함께 사용하고 몇 줄의 코드입니다 : 여기에 해당 문자열의 시작 부분의 조각입니다
import requests
# api_user and api_pw not printed here for security reasons
r = requests.get('http://ourdomain.com/api/featured/school/json', auth=(api_user, api_pw))
status = r.status_code # Produces 200 every time
rawdata = r.read()
print rawdata
을 그리고 내가 할 그 때마다 인코딩 된 문자열 나는 그렇게한다. 요청 방법 디코딩 및/또는 그것을 "해결"하는 그 인코딩으로 데이터를 반환하고, 왜) 가) 내 자신의 교화를 위해 (어떤 인코딩입니다), 그리고 B :
은 사람이 나를 결정하는 데 도움이 될 수 있습니다.
미리 감사드립니다.
재미 있습니다! dir (r) JSON 문자열을 출력합니다. read() 대신에 호출해야하는 메서드입니까? – tommytwoeyes
더 자세히 살펴보면, 라이브러리의 마지막 부분에서 이것이 잘못 사용 된 것을 볼 수 있습니다 (예 : r.read() 대신 r.content를 호출해야 함). 그러나 출력이 다른 이유는 설명하지 않습니다. 내 개발 가상 머신 (다른 모든 요소는 같고, r.read()를 호출 할 때 JSON 문자열을 출력 함) 및 인코딩 된 문자열을 출력하는 제작 박스 (production box)를 출력합니다. 출력이 다른 이유는 무엇입니까? – tommytwoeyes
@waveslider 내가보기 엔 내 목록에있는 것 이외의 요청에 대해서는 아무것도 모른다.하지만 기본 인코딩과 관련이 있다고 추측한다. dev 상자는 아마도 UTF-8 (모든 JSON이되어야 함)이고 서버는 다른 것입니다. 나는'.content' 속성이 모든 인코딩 헤더 등을보고 그것을 적용하는 중이며'.read()'는 단지 바이트를 와이어에서 꺼내는 것과 다르게 인코딩되기 때문에 바이트를 얻는다. . 다시 말하지만, 모두 그저 추측 일뿐입니다. –