Python requests 라 이브 러 리 인 코딩 socks 5 에이전트 문제 해결
response = requests.get(URL, params=params,
headers=headers, timeout=10)
print 'self.encoding',response.encoding
output:
self.encoding ISO-8859-1
관련 자 료 를 찾 아 보고 requests 의 소스 코드 를 보 았 습 니 다.서버 가 응답 하 는 머리 에 만 Content-Type 이 포함 되 어 있 고 그 안에 charset 정보 가 있 습 니 다.requests 는 정확하게 식별 할 수 있 습 니 다.그렇지 않 으 면 기본 ISO-8859-1 인 코딩 을 사용 할 것 입 니 다.github 에서 도 이 문 제 를 토론 하 였 으 나,requests 의 저자 들 은 rfc 에 근거 하여 왔 다 고 말 했다.위 코드 에서 response.text 는 requests 라 이브 러 리 가 응답 하 는 유 니 코드 인 코딩 내용 을 되 돌려 줍 니 다.
이렇게 하면 우리 가 중국어 웹 페이지 의 응답 내용 을 가 져 올 때 응답 머리 에 charset 정보 가 없 으 면 response.text 의 인 코딩 에 문제 가 생 길 수 있 습 니 다(requests 의 json()방법 도 이 인 코딩 의 영향 을 받 습 니 다)
예 를 들 어 내 가 바 이 두 의 홈 페이지 를 기어 올 랐 을 때 중국 어 는 utf-8 인 코딩 이 었 다.
다음 python 2.7 코드
In [14]: a = ' ' #utf-8
In [15]: a
Out[15]: '\xe7\xba\xa6'
In [22]: b=a.decode('ISO-8859-1')#response.text ISO-8859-1 , decode Unicode
In [23]: b
Out[23]: u'\xe7\xba\xa6'
In [26]: c=b.encode('utf8')# ISO-8859-1, utf8
In [27]: c
Out[27]: '\xc3\xa7\xc2\xba\xc2\xa6'# encode utf-8, , ' ' utf-8 '\xe7\xba\xa6'
해결 방법 1:response.content,response.content in bytes 를 사용 하기 때문에 content 로 인 코딩 을 스스로 결정 할 수 있 습 니 다.해결 방법 2:요청 을 받 은 후 response.encoding='utf-8'사용
해결 방법 3:requests 라 이브 러 리 를 이용 하여 응답 내용 에 따라 인 코딩 의 함 수 를 판단 하고 참고 문헌 에 언급 되 어 있 습 니 다.
python 2 의 인 코딩 은 어 지 러 운 str 입 니 다.여러 가지 인 코딩 일 수 있 습 니 다.python 3 는 str 를 유 니 코드 로 통일 하고 byte 는 여러 가지 인 코딩 일 수 있 습 니 다.
python 2 에서 encode 뒤 에는 str 형식,decode 뒤 에는 Unicode 형식,python 3 에서 encode 뒤 에는 byte 형식,decode 뒤 에는 str 형식(Unicode 인 코딩)
python 3 를 사용 하 세 요.다음은 python 3 코드 입 니 다.
In [13]: a = ' ' #Unicode
In [14]: type(a)
Out[14]: str
In [15]: b=a.encode('utf8')
In [16]: b
Out[16]: b'\xe7\xba\xa6'
In [17]: type(b)
Out[17]: bytes
In [27]: b'\xe7\xba\xa623,000'.decode('ISO-8859-1')
Out[27]: '约23,000'
In [28]: type(b'\xe7\xba\xa623,000'.decode('ISO-8859-1'))
Out[28]: str
In [29]: b'\xe7\xba\xa623,000'.decode('utf8')
Out[29]: ' 23,000'
질문현재 requests 2.13.0 의 socks 5 대 리 는 제 가 사용 할 때 문제 가 생 길 수 있 습 니 다.
제 가 사용 하 는 대 리 는 shadowsocks 입 니 다.예 를 들 어 방문 하고 싶 습 니 다.https://www.facebook.com 로 컬 127.0.0.1:1080 포트 에 socks 5 요청 을 보 냈 을 때 그림자 ocks 가 IP 주소 로 연결 되 어 연결 이 되 지 않 는 것 을 발 견 했 습 니 다.chrome 으로 페 이 스 북 을 연결 할 때 그림자 ocks 는 www.facebook.com 으로 연결 되 어 성공 적 으로 연결 할 수 있 는 것 을 발 견 했 습 니 다.DNS 해석 문제 일 것 입 니 다.중복 해석 문제 가 발생 했 습 니 다.requests 2.12 를 사용 하면 이 문제 가 없 을 것 입 니 다.github 에서 도 관련 issue 를 찾 았 습 니 다.
import requests
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/56.0.2924.87 Safari/537.36'}
proxies = {'http': 'socks5://127.0.0.1:1080','https':'socks5://127.0.0.1:1080'}
url = 'https://www.facebook.com'
response = requests.get(url, proxies=proxies)
print(response.content)
파 이 썬 requests 라 이브 러 리 인 코딩 socks 5 프 록 시 문 제 를 해결 하 는 것 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.참고 하 시기 바 랍 니 다.여러분 들 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
installation of Python moduleubuntu에서 Python의 모듈들을 설치하기 위해서 pip명령어를 사용했는데 pip명령어를 찾을 수가 없단다😂 이게 무슨일인가 싶었는데 내가 Python만 설치하고 pip를 설치하지 않았던거다 (역시 모든것의 잘...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.