[Python] Non capisco come funziona il PUT con requests.

Gollum1 gollum1.smeagol1 a gmail.com
Sab 14 Feb 2015 14:19:49 CET


Mi sono salvato una intera sessione di http request con firefox e il
suo plugin livehttp.

ho replicato tutte le chiamate di tipo .get() con requests.get(), ed
analizzato i vari risultati, estraendone i dati che mi interessavano.

ora devo iniettare in una pagina due parametri, che nell'analisi dei
request è fatto con il comando put:

https://10.24.144.13/cucm-uds/user/myuser/number/1315f0a2-8c4f-480f-d4fd-766ca9072056/callforwardallsetting?dojo.preventCache=1417152184557

GET /cucm-uds/user/myuser/number/1315f0a2-8c4f-480f-d4fd-766ca9072056/callforwardallsetting?dojo.preventCache=1417152184557
HTTP/1.1
Host: 10.24.144.13
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0
Accept: application/json
Accept-Language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
Referer: https://10.24.144.13/ucmuser/main
Cookie: JSESSIONID=6D8FCEA894B9EF9F2CAAA72954C3A4CC;
JSESSIONIDSSO=F6A9A1064FD9130CCE79BB0E436FDA82
Connection: keep-alive

HTTP/1.1 200 OK
Cache-Control: private
Expires: Thu, 01 Jan 1970 01:00:00 CET
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Fri, 28 Nov 2014 05:23:04 GMT
----------------------------------------------------------
https://10.24.144.13/cucm-uds/user/myuser/number/1315f0a2-8c4f-480f-d4fd-766ca9072056/callforwardallsetting

PUT /cucm-uds/user/myuser/number/1315f0a2-8c4f-480f-d4fd-766ca9072056/callforwardallsetting
HTTP/1.1
Host: 10.24.144.13
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/json; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: https://10.24.144.13/ucmuser/main
Content-Length: 63
Cookie: JSESSIONID=6D8FCEA894B9EF9F2CAAA72954C3A4CC;
JSESSIONIDSSO=F6A9A1064FD9130CCE79BB0E436FDA82
Connection: keep-alive
{"voicemailenabled":"false", "destinationnumber":"00000000000000"}
HTTP/1.1 200 OK
Cache-Control: private
Expires: Thu, 01 Jan 1970 01:00:00 CET
X-Frame-Options: SAMEORIGIN
Content-Type: text/plain
Transfer-Encoding: chunked
Date: Fri, 28 Nov 2014 05:23:41 GMT
----------------------------------------------------------

questo invece è il segmento di programma che dovrebbe replicare queste
due chiamate:

    response = requests.get(urls['callforwardallsetting'],
cookies=cookies, verify=False)
    assert response.status_code == requests.codes.ok

    response = requests.put(urls['callforwardallsetting'], fwd_param,
cookies=cookies, verify=False)


assert sulla seconda naturalmente fallisce.

fwd_param = {'voicemailenabled': "false", 'destinationnumber':
destination_number}

dove destination_number è il numero passato alla funzione come parametro.
i cookies sono corretti, perché fino alla chiamata prima del put funzionano...
e il verify=false è perché purtroppo non è stato registrato da nessuna
parte il certificato del sito interno.


a quanto ho capito, in qualche modo put dovrebbe modificare
fisicamente il file xml che io ho letto nella prima chiamata,
inseredovi nei campi corretti i valori che io ho passato...

questo è il file xml che ricevo dalla prima delle due chiamate:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<callforwardallsetting
        uri="https://10.24.144.13/cucm-uds/user/gasip3000/number/76d919d2-be6b-a781-f1ed-811dbd33aaff/callforwardallsetting"
        version="9.1.2"
        enabled="false">
    <id>326bd07b-cce2-4071-9383-a7d1fab5e8d9</id>
    <voicemailenabled>false</voicemailenabled>
    <destinationnumber></destinationnumber>
    <datetimestamp>1423848593</datetimestamp>
    <callingsearchspace_cfa>096478cd-fc23-decd-aa98-16e7736534a0</callingsearchspace_cfa>
    <callingsearchspace_scfa
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
    <history
            uri="https://10.24.144.13/cucm-uds/user/myuser/number/76d919d2-be6b-a781-f1ed-811dbd33aaff/callforwardallsetting/history"/>
</callforwardallsetting>


il risultato della funzione, quando la lancio è il seguente:

reponse.text ritorna la stringa: "Unsupported Media Type"

    assert response.status_code == requests.codes.ok
AssertionError


quindi è probabile che sia sbagliato il modo in cui passo i parametri?

Tnx&Byez
-- 
Gollum1 - http://www.gollumone.it
Tesssssoro, dov'é il mio tessssoro...


Maggiori informazioni sulla lista Python