2013-10-13 5 views
1

요청에 정렬 된 매개 변수를 게시하려면 어떻게해야합니까?주문 매개 변수 파이썬

나는 다음을 시도했지만, 그들 중 누구도 작동하지 :

payload = dict{('f','1'),('s','2'),('t','3'),('f','4'),('ft','5'),('s','6'),('se','7'),('e':8,'data[1]','9'),('t','10'),('el','1q'),('data[2]','12'),('data[3]','13'),('data[4]','14'),('htmldata[5]','15')} 

payload = OrderedDict{('f','1'),('s','2'),('t','3'),('f','4'),('ft','5'),('s','6'),('se','7'),('e':8,'data[1]','9'),('t','10'),('el','1q'),('data[2]','12'),('data[3]','13'),('data[4]','14'),('htmldata[5]','15')} 

payload = (('f','1'),('s','2'),('t','3'),('f','4'),('ft','5'),('s','6'),('se','7'),('e':8,'data[1]','9'),('t','10'),('el','1q'),('data[2]','12'),('data[3]','13'),('data[4]','14'),('htmldata[5]','15')) 

payload = ([('f','1'),('s','2'),('t','3'),('f','4'),('ft','5'),('s','6'),('se','7'),('e':8,'data[1]','9'),('t','10'),('el','1q'),('data[2]','12'),('data[3]','13'),('data[4]','14'),('htmldata[5]','15')]) 

내가 점점 오전 오류는 다음과 같습니다 오류없이 임의의 순서로

SyntaxError: invalid syntax 

이 하나 POST 매개 변수 :

payload = {'f':'1','s':'2','t':'3','f':'4','ft':'5','s':'6','se':'7','e':8,'data[1]':'9','t':'10','el':'1q','data[2]':'12','data[3]':'13','data[4]':'14','htmldata[5]':'15'} 

다음 코드를 사용하여 정렬 된 매개 변수를 게시하려면 어떻게해야합니까?

c = requests.post(url, params = payload) 
+0

'requests'? __가 유효합니다. 'requests' 문서는 사전이'data' /'params' 인수로 전달되어야한다고 말하고 오직 키를 정렬하는 방법에 대해서는 언급하지 않습니다. HTTP 명세에서는'application/x-www-form-urlencoded'가 문서 "[8.2.1] (http://www.w3.org/MarkUp/html-spec)에 나오는 순서대로 전달되어야한다고 명시하고있다. /html-spec_8.html#SEC8.2.1). 따라서 양식 게시를 자동화하는 경우이 정보가 필요할 수 있습니다. – cod3monk3y

답변

4
  • dict{...} 잘못, 그것은 dict(...)을해야합니다. OrderedDict{...}
  • dictOrderedDict 당신이 튜플의 목록에서 ('e':8,'data[1]','9')을 인수
  • 같은 시퀀스을 위해 동일 간다. 아마 ('e',8),('data[1]','9')이어야합니다.

이 생산하는 딕셔너리항상 정렬되지 않은 것, (그것은 DICT 당신이 게시 문자 노동에 상응의) :

payload = dict([('f','1'),('s','2'),('t','3'),('f','4'),('ft','5'),('s','6'),('se','7'),('e', 8),('data[1]','9'),('t','10'),('el','1q'),('data[2]','12'),('data[3]','13'),('data[4]','14'),('htmldata[5]','15')]) 

이 튜플의 튜플을 생산하는 요청은 data의 인수로을 취하지 않습니다.

payload = (('f','1'),('s','2'),('t','3'),('f','4'),('ft','5'),('s','6'),('se','7'),('e', 8),('data[1]','9'),('t','10'),('el','1q'),('data[2]','12'),('data[3]','13'),('data[4]','14'),('htmldata[5]','15')) 

나머지 두 (주문 사전 및 튜플목록) 당신이 원하는 것을 생산할 예정 :

파이썬의 영업 이익의 지식은 나에게 제한 나타나지만 질문 __How 내가 사용하는 주문 PARAMS을 게시 할 수 있습니다
from collections import OrderedDict 
payload = OrderedDict([('f','1'),('s','2'),('t','3'),('f','4'),('ft','5'),('s','6'),('se','7'),('e',8),('data[1]','9'),('t','10'),('el','1q'),('data[2]','12'),('data[3]','13'),('data[4]','14'),('htmldata[5]','15')]) 
payload = [('f','1'),('s','2'),('t','3'),('f','4'),('ft','5'),('s','6'),('se','7'),('e', 8),('data[1]','9'),('t','10'),('el','1q'),('data[2]','12'),('data[3]','13'),('data[4]','14'),('htmldata[5]','15')] 
+0

이것에 대한 명확성을 가져 주셔서 감사합니다. 나는 POST 매개 변수를 주문하는 방법을 찾고 있었고 완벽하게 작동하는'OrderedDict'를 시도했습니다. 'request'에 대한'data' 인수가 취할 수 있다고 언급 한 [모든 문서] (http://docs.python-requests.org/ko/latest/api/?highlight=post#requests.post)가 없습니다. 인수로서 튜플의리스트. 이 정보를 어디에서 수집 했습니까? 감사! – cod3monk3y

+1

주로 소스를보고 관련 조각이 ['RequestEncodingMixin._encode_params'] (https://github.com/kennethreitz/requests/blob/9dc660269f3270cf60ba5e1fd855e853241218d5/requests/models.py#L76) 및 [' to_key_value_list'] (https://github.com/kennethreitz/requests/blob/9dc660269f3270cf60ba5e1fd855e853241218d5/requests/utils.py#L145) (의견과 예를보십시오). 기본적으로 이는 매핑 또는 두 개의 튜플을 생성하는 반복 가능한 매개 변수를 취할 수 있음을 의미합니다 (매핑으로 주어질 수있는 대부분의 매개 변수가 동일 함). – mata

+0

환상적인 파기.'_encode_params'에있는 docstring은 원하는 정보를 제공합니다 :''dict 나 2-tuples의리스트로 전달 될 때 매개 변수를 성공적으로 인코딩 할 것입니다. 만약 데이터가 2-tuples의리스트라면 매개 변수는 임의입니다. "필자의 경우, POST 양식 데이터가 고장난 경우 서버가 양식을 거부하고있었습니다. 튜플'[(a, b), ...]의리스트를 사용하여 문제가 해결되었습니다. – cod3monk3y