I'm trying to automate a web form. The payload when I actually run the query in Chrome looks like this on the inspect window...
data: [{"property":"TimeQuick","value":"Active"},{"property":"TimeQuickDurationOptions","value":3},{"property":"TimeQuickStartDate","value":"05/15/2019 00:00:00"},{"property":"TimeQuickEndDate","value":"05/15/2019 23:59:59"},{"property":"ProviderCode","value":["FPL"]},{"property":"SellerCode","value":[""]},{"property":"Ref","value":""},{"property":"POR","value":["SOCO"]},{"property":"POD","value":["FPC"]},{"property":"Path","value":""},{"property":"ServiceIncrement","value":["DAILY"]},{"property":"TSClass","value":[""]},{"property":"TSType","value":[""]},{"property":"TSWindow","value":""},{"property":"TSPeriod","value":""},{"property":"TSSubClass","value":""},{"property":"Time","value":"Active"},{"property":"TimeDurationOptions","value":3},{"property":"TimeStartDate","value":"05/15/2019 00:00:00"},{"property":"TimeEndDate","value":"05/15/2019 23:59:59"},{"property":"ShowActiveData","value":true},{"property":"DaylightSavings","value":false}]
sort: [{"property":"TOL","direction":"DESC","root":"data"}]
pagingEnabled: 1
page: 1
limit: 50
I tried to represent that as a python variable like this
datareq = [
('data',
{'property':'TimeQuick', 'value':'Active'},
{"property":"TimeQuickDurationOptions","value":'3'},
{"property":"TimeQuickStartDate","value":"05/15/2019 00:00:00"},
{"property":"TimeQuickEndDate","value":"05/15/2019 23:59:59"},
{"property":"ProviderCode","value":["FPL"]},
{"property":"SellerCode","value":[""]},
{"property":"Ref","value":""},
{"property":"POR","value":["SOCO"]},
{"property":"POD","value":["FPC"]},
{"property":"Path","value":""},
{"property":"ServiceIncrement","value":["DAILY"]},
{"property":"TSClass","value":[""]},
{"property":"TSType","value":[""]},
{"property":"TSWindow","value":""},
{"property":"TSPeriod","value":""},
{"property":"TSSubClass","value":""},
{"property":"Time","value":"Active"},
{"property":"TimeDurationOptions","value":3},
{"property":"TimeStartDate","value":"05/15/2019 00:00:00"},
{"property":"TimeEndDate","value":"05/15/2019 23:59:59"},
{"property":"ShowActiveData","value":'true'},
{"property":"DaylightSavings","value":'false'}
),
('sort',
{"property":"TOL","direction":"DESC","root":"data"}
),
('pagingEnabled', 1),
('limit', 50)
]
When I ran s.post(myurl, data=datareq, cert=mycerts)
I got the following error:
Traceback (most recent call last):
File "<ipython-input-78-37ee269ebbce>", line 1, in <module>
logblah=s.post(myurl, data= datareq, cert=mycerts)
File "C:\Users\me\AppData\Local\Continuum\anaconda3\Lib\python\requests\sessions.py", line 555, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "C:\Users\me\AppData\Local\Continuum\anaconda3\Lib\python\requests\sessions.py", line 494, in request
prep = self.prepare_request(req)
File "C:\Users\me\AppData\Local\Continuum\anaconda3\Lib\python\requests\sessions.py", line 437, in prepare_request
hooks=merge_hooks(request.hooks, self.hooks),
File "C:\Users\me\AppData\Local\Continuum\anaconda3\Lib\python\requests\models.py", line 308, in prepare
self.prepare_body(data, files, json)
File "C:\Users\me\AppData\Local\Continuum\anaconda3\Lib\python\requests\models.py", line 499, in prepare_body
body = self._encode_params(data)
File "C:\Users\me\AppData\Local\Continuum\anaconda3\Lib\python\requests\models.py", line 97, in _encode_params
for k, vs in to_key_val_list(data):
ValueError: too many values to unpack (expected 2)
I'm assuming the problem is in the way I've structured my datareq
variable. What would be the proper way to make that POST?
Edit/Update: I've tried each of Alex and Ivan's suggestions but neither work. They each give me a cryptic message from the server that success=false
. If I try them with json=datareq
instead of data=datareq
then I get a response from the server with 0 results even though it should have many so it seems like that is getting closer but still not all the way.
from How to represent complex POST data in python for requests
No comments:
Post a Comment