Requests에 대한 urlencode 문제

2429 단어
알다시피 Requests는 요청에 대해 자동으로 urlencode를 진행하지만, 이 자동으로 진행되는 urlencode는 사실 뜻대로 되지 않는 부분이 많다.
1. 가끔, 우리의 데이터는 이미 urlencode가 지나간 데이터입니다. 비록 우리가 urlencode를 진행하기를 원하지 않지만, 이것은 다시 urlencode를 한 번 해서 데이터의 면목을 완전히 잃게 합니다.
2. 때때로 우리는 urlencode를 원하지만 인코딩된 문자 집합에 대한 요구가 있지만 그것을 할 수 없을 뿐만 아니라 기본적인 urlencode로 데이터의 면모를 바꾸기도 한다.
 
requests에서 urlencode의 대략적인 규칙:
get 요청에 대해 Requests는 인자가 urlencode를 진행했는지 자동으로 판단합니다
post 요청에 대해 데이터가 사전 형식이라면 urlencode(파라미터가 urlencode를 거쳤든 안 거쳤든 상관없음)를 자동으로 강제합니다. 만약 데이터가 문자열 형식이라면 파라미터가 urlencode를 거쳤는지 자동으로 판단하지만, 이렇게 사용하려면 헤더 {'Content-Type': '응용 프로그램/x-ww-form-urlencoded'}
 
그래서 문제1:
우리는post 요청을 사용할 때 사전 형식의 매개 변수를 문자열로 바꾸고 헤더스를 더하면 해결할 수 있다
headers={'Content-Type': 'application/x-www-form-urlencoded'}

'''
data={'a':'%E5%BE%B7%E7%8E%9B%E8%A5%BF%E4%BA%9A','b':'123'} => data="a=%E5%BE%B7%E7%8E%9B%E8%A5%BF%E4%BA%9A&b=123" '''

 
문제2:
데이터를 필요한 문자 인코딩의urlencode로 바꾸고 헤더를 추가하면 됩니다
from urllib.parse import urlencode
import requests

headers={'Content-Type': 'application/x-www-form-urlencoded'}
data={'a':' ','b':'132'}
data
=urlencode(data,encoding='gb2312')

r
=requests.post(url,headers=headers,data=data)

좋은 웹페이지 즐겨찾기