2016-10-05 5 views
2

Ich versuche, Python-Anfrage-Modul zu verwenden, um einige Werte an den Server mit dem folgenden Code zu übergeben, aber in der http-Anfrage ändert sich die Reihenfolge der Nutzdaten.Python Anfrage Payload ohne Sortierung

payload3 = {'OSILA_LinkTo_Site': OSILA_LinkTo_Site, 'OSILA_LinkTo_Service': OSILA_LinkTo_Service, 'OSILA_Locale': OSILA_Locale, 'OSILA_Locale_display': OSILA_Locale, 'OSILA_TimeZone': OSILA_TimeZone, 'OSILA_TimeZone_display': OSILA_TimeZone, 'selectedUser': '', 'OSILA_LinkTo_User_display': '', 'OSILA_LinkTo_User': OSILA_LinkTo_User, 'OSILA_DisplayName': OSILA_DisplayName, 'OSILA_CountryCode': OSILA_CountryCode, 'OSILA_AreaCode': OSILA_AreaCode, 'OSILA_LocalOfficeCode': OSILA_LocalOfficeCode, 'OSILA_LinkTo_Extension': OSILA_LinkTo_Extension, 'OSILA_ProductPackage': OSILA_ProductPackage, 'OSILA_ProductPackage_display': OSILA_ProductPackage, 'OSILA_DeviceType': OSILA_DeviceType, 'OSILA_DeviceType_display': OSILA_DeviceType, 'OSILA_Parameter_4': OSILA_Parameter_4, 'OSILA_Parameter_4_display': OSILA_Parameter_4, 'OSILA_Parameter_3': OSILA_Parameter_3, 'OSILA_Parameter_3_display': OSILA_Parameter_3, 'OSILA_Parameter_2': OSILA_Parameter_2, 'OSILA_Parameter_2_display': OSILA_Parameter_2, 'OSILA_Parameter_5': OSILA_Parameter_5, 'OSILA_Parameter_5_display': OSILA_Parameter_5, 'OSILA_Parameter_1': OSILA_Parameter_1, 'OSILA_Parameter_1_display': OSILA_Parameter_1, 'OSILA_CreateNewFax': OSILA_CreateNewFax, 'OSILA_LinkTo_ServiceFax': '', 'OSILA_CountryCodeFax': '', 'OSILA_AreaCodeFax': '', 'OSILA_LocalOfficeCodeFax': '', 'OSILA_LinkTo_ExtensionFax': '', 'OSILA_ProvisioningDate': OSILA_ProvisioningDate, 'OSILA_DateMail_1': OSILA_ProvisioningDate, 'OSILA_DateMail_2': '', 'OSILA_DateMail_3': '', 'OSILA_DateMail_4': '', 'OSILA_DateMail_5': '', 'OSILA_DateMail_6': '', 'OSILA_DateMail_7': '', 'OSILA_DateMail_8': '', 'OSILA_DateMail_9': '', 'attachEventListeners': '', 'webMgrRequestId': webMgrRequestId, 'WT': WT2, 'enterConfirm': 'true', 'users_R_0_C__select': 'on', 'selectedUser': '0'} 

subcr = session.post("http://192.168.0.10:8080/OSILAManager/createSubscriber2.do", data=payload3)

Browser i die Werte in der folgenden Reihenfolge zu sehen sind vorbei, aber wenn ich Python verwenden ihre Reihenfolge zu ändern, ist es eine Möglichkeit, diese Sortierung

OSILA_LinkTo_Site 
OSILA_LinkTo_Service 
OSILA_Locale 
OSILA_Locale_display 
OSILA_TimeZone 
OSILA_TimeZone_display 
users_R_0_C__select 
selectedUser 
OSILA_LinkTo_User_display 
OSILA_LinkTo_User 
OSILA_DisplayName 
OSILA_CountryCode 
OSILA_AreaCode 
OSILA_LocalOfficeCode 
OSILA_LinkTo_Extension 
OSILA_ProductPackage 
OSILA_ProductPackage_display 
OSILA_DeviceType 
OSILA_DeviceType_display 
OSILA_Parameter_4 
OSILA_Parameter_4_display 
OSILA_Parameter_3 
OSILA_Parameter_3_display 
OSILA_Parameter_2 
OSILA_Parameter_2_display 
OSILA_Parameter_5 
OSILA_Parameter_5_display 
OSILA_Parameter_1 
OSILA_Parameter_1_display 
OSILA_CreateNewFax 
OSILA_LinkTo_ServiceFax 
OSILA_CountryCodeFax 
OSILA_AreaCodeFax 
OSILA_LocalOfficeCodeFax 
OSILA_LinkTo_ExtensionFax 
OSILA_ProvisioningDate 
OSILA_DateMail_1 
OSILA_DateMail_2 
OSILA_DateMail_3 
OSILA_DateMail_4 
OSILA_DateMail_5 
OSILA_DateMail_6 
OSILA_DateMail_7 
OSILA_DateMail_8 
OSILA_DateMail_9 
attachEventListeners 
webMgrRequestId 
WT 
enterConfirm 
+0

Wörterbücher haben keine Reihenfolge. benutze 'collections.OrderedDict' –

+1

Oder python 3.6 - sie haben in python bestellt 3.6 – Mathias

+0

Du hast doppelte Schlüssel, so dass es wahrscheinlich ein größeres Problem ist. –

Antwort

1
zu vermeiden

Sie können Tupel anstelle des dict passieren:

In [7]: 
    ...: import requests 
    ...: d = {"foo":"bar","bar":"foo","123":"456"} 
    ...: t = (("foo","bar"),("bar","foo"),("123","456")) 
    ...: r1 = requests.post("http://httpbin.org", data=d) 
    ...: r2 = requests.post("http://httpbin.org", data=t) 
    ...: print(r1.request.body) 
    ...: print(r2.request.body) 
    ...: 
bar=foo&123=456&foo=bar 
foo=bar&bar=foo&123=456 

auch y ou haben selectedUser zweimal in Ihrem dict so das wird nicht funktionieren, da Sie nur die letzte Schlüssel/Wert-Paar haben, werden Sie zuweisen, nicht sicher, was das richtige Format ist aber wieder erlauben würde Tupeln Sie einen Schlüssel zu wiederholen:

In [8]: import requests 
    ...: d = {"foo":"bar","bar":"foo","123":"456","selectedUser":"0", "selectedUs 
    ...: er":"1"} 
    ...: t = (("foo","bar"),("bar","foo"),("123","456"), ("selectedUser","0"),("s 
    ...: electedUser","1")) 
    ...: r1 = requests.post("http://httpbin.org", data=d) 
    ...: r2 = requests.post("http://httpbin.org", data=t) 
    ...: print(r1.request.body) 
    ...: print(r2.request.body) 
    ...: 
bar=foo&selectedUser=1&123=456&foo=bar 
foo=bar&bar=foo&123=456&selectedUser=0&selectedUser=1 

Sie können sehen, mit einem Diktat verlassen Sie nur selectedUser=1 als das letzte des Paares zugeordnet ist. Das ist möglicherweise Ihr Problem mehr als die Reihenfolge der Post-Body-Tasten. Wenn Sie nur selectedUser einmal verwenden wollten, dann entfernen Sie, was Sie nicht posten wollten.