2013-10-19 14 views
6

Quindi voglio automatizzare la compilazione e l'invio di un modulo e sto usando Requests per farlo.Invio di un modulo utilizzando Requests Python

Da elementi ispezionando So che l'url di presentare al e dal tipo di sottomissione (post):

method="post" 
action="/sformsubmit" 
enctype="multipart/form-data" 

mio problema è che la mia richiesta non sta attraversando e di essere abbastanza nuovo per questo non sono sicuro perché.

Sul mio sito ho due lati i pulsanti a fianco in questo modo:

___________________________   ________________________________ 
    | Submit decleration |   |  Reset Form   | 
    ___________________________   ________________________________ 

E quando ho ispezionare elementi su quella linea ottengo:

<td align="center" colspan="2"> 
    <input type="hidden" name="inLeader" value> 
    <input type="hidden" name="inMember" value> 
    <input type="hidden" name="version" value="0"> 
    <input type="hidden" name="key" value="2013:a:c:3:2s"> 
    <input type="submit" value="Submit declaration"> 
    <input type="reset" value="Reset form"> 
</td> 

sto provando il seguente:

>>> payload = {'inLeader':'', 'inMember':'', 'version':'0', 'key':'2013:a:c:3:2s'} 

Tuttavia non sembra funzionare e non genera alcun errore.

Qualsiasi aiuto sarebbe grato. Grazie in anticipo

+0

Che errore ottieni? Qual è la risposta? Il tuo payload non è corretto ma è ancora difficile rispondere correttamente alla tua domanda senza sapere quale sia la risposta effettiva. – aychedee

+0

Non ho errori, sembra che vada bene, non succede nulla. Lo 'status_code' quando controllo tramite' p.status_code = 200' – user2897415

+0

Traceback? Inoltre, l'URL che stai cercando di pubblicare sarebbe bello da avere. –

risposta

5

Ok, il tuo carico utile è sbagliato. MA. Non sono sicuro che cambiarlo ti sarà di grande aiuto perché non hai incluso il messaggio di errore che stai ricevendo.

payload = { 
    'inLeader':'', 
    'inMember':'', 
    'version':'0', 
    'key':'2013:a:c:3:2s', 
} 

Quello che c'è da capire su moduli HTML e richieste POST è che quando si fa clic su un pulsante di invio in un modulo che invia l'attributo value di qualsiasi campo con un attributo name. Ad esempio, il campo di input con il tipo submit non viene inviato. Non ha name. Sono sospettoso che i campi inLeader e inMember non contengano dati. È stato impostato tramite Javascript in qualche modo?

Hai detto in un commento che devi essere registrato per accedere al modulo? Questo probabilmente significa che devi anche inviare il cookie corretto insieme alla richiesta. Quindi, visitando l'URL mi viene richiesto un nome utente/password. Questo sito Web utilizza basic auth.

requests supporta questo. Esempio di seguito:

import requests 
from requests.auth import HTTPBasicAuth 
requests.get(url, auth=HTTPBasicAuth('your username', 'your password')) 

provare solo fare una richiesta GET e vedere se si può almeno ottenere una risposta 200. Ciò significa che l'autenticazione funziona. Quindi puoi provare a fare il post effettivo.

+0

Non penso che venga impostato tramite Javascript, ho accesso ad un altro modulo che è stato inviato in modo che il < input type = "submit" value = "Submit declaration"> 'è stato modificato in' 'e in quello sono ancora vuoti – user2897415

+1

Davvero? Quello di cui hai effettivamente bisogno per eseguire il debug correttamente non è il codice sorgente. Ma una vera e propria richiesta di posta.Puoi visualizzarli in Chrome nella scheda 'network' degli strumenti di chrome dev. Quando invii il modulo manualmente, registrerà il POST e potrai vedere quali informazioni sono state inviate. L'URL mi sta bene. – aychedee

+0

dove dovrei cercare nella scheda 'network' per vedere cosa viene inviato ... Ho cliccato sulla richiesta e nella scheda' preview' mi mostra 'html: cosa vedo in inspect element' quindi cosa parte mi mostra cosa viene inviato – user2897415

Problemi correlati