2016-10-21 7 views
0

나는이 곳 곳곳에서 수색을 해왔지만 문제를 해결할 수 없었다.Python 요청 : 퍼센트 문자로 된 URL

로컬 API를 사용하여 일부 데이터를 가져 오는 중, 해당 API에서 와일드 카드는 퍼센트 문자 %입니다. urlReq = 'http://myApiURL?ID=something&parameter=%w42'

그리고 내가 get 함수이 전달 해요 : :

URL은 지금처럼

req = requests.get(urlReq,auth=HTTPBasicAuth(user, pass))

얻을 다음과 같은 오류가 : InvalidURL: Invalid percent-escape sequence: 'w4'

나는 시도 문자 %%을 사용하여 % 문자를 이스케이프하지만 헛된 것입니다. 나는 또한 다음을 시도했다 :

urlReq = 'http://myApiURL?ID=something&parameter=%sw42' % '%' 그러나 잘되지 않았다.

누구든지 해결 방법을 알고 있습니까? 내가 파이썬 2.7.8 : 아나콘다 1.9.1 (64 비트)

+0

'%'는 URL에 특수 문자를 인코딩하는 데 사용됩니다. '% '문자를이 시퀀스'% 25 '로 인코딩 할 수 있습니다. 자세한 내용은 여기를 참조하십시오 : http : //www.w3schools.co.kr/tags/ref_urlencode.asp – Tryph

+0

정말 고마워! 이제 완벽하게 작동합니다. – Elie

답변

0

크레딧 @Tryph합니다 :

은 %가 URL에 특수 문자를 인코딩하는 데 사용됩니다. 이 시퀀스 % 25로 % 문자를 인코딩 할 수 있습니다. 자세한 내용 여기를 참조하십시오 w3schools.com/tags/ref_urlencode.asp

+0

내 의견은 Maurice와 Hisham Karam이 언급 한대로 특수 문자를 자동으로 인코딩하는 함수를 사용하지 못하도록합니다. – Tryph

4

당신은 urllib.quote에보고해야한다을 사용하고

PS - 트릭을 할해야합니다. 참조 용으로 docs을 살펴보십시오.

이 답변을 확장하십시오. 문제는 % (+ 16 진수)은 URL의 특수 문자에 대해 escape sequence입니다. 서버에서 문자 그대로 %을 해석하도록하려면이 문자를 %25으로 바꾸면됩니다. 앞에서 언급 한 qoute 함수는 여러분을 대신해 그런 일을합니다.

0

requests 당신이 requests.compat.quote_plus를 사용해야 여기 take alook

예 :

>>> requests.compat.quote_plus('example: parameter=%w42') 
'example%3A+parameter%3D%25w42' 
2

requestsrequests.get()params 인수에 매개 변수를 전달하여 당신을 위해 쿼리 문자열을 구축하자 (see documentation) :

api_url = 'http://myApiURL' 
params = {'ID': 'something', 'parameter': '%w42'} 
r = requests.get(api_url, params=params, auth=(user, pass)) 

requests 그런 다음 쿼리 문자열의 매개 변수를 백분율로 인코딩해야합니다. 적어도 내 컴퓨터에 requests 버전 2.11.1을 가지고 있다고 말하면서, %은 URL에 전달할 때 인코딩되므로 사용중인 버전을 확인할 수 있습니다.

또한 기본 인증의 경우 위와 같이 튜플에 사용자 이름과 암호를 간단히 전달할 수 있습니다.