Come faccio a leggere il post http non elaborato STRING. Ho trovato diverse soluzioni per leggere una versione analizzata del post, tuttavia il progetto su cui sto lavorando invia un payload xml non elaborato senza un'intestazione. Quindi sto cercando di trovare un modo per leggere i dati del post senza che sia analizzato in una chiave => array di valori.Python: BaseHTTPRequestHandler - Leggi post non elaborato
risposta
Penso che self.rfile.read(self.headers.getheader('content-length'))
dovrebbe restituire i dati non elaborati come una stringa. Secondo la documentazione direttamente all'interno della classe BaseHTTPRequestHandler:
- rfile is a file object open for reading positioned at the
start of the optional input data part;
self.rfile.read(int(self.headers.getheader('Content-Length')))
restituirà i dati POST HTTP grezzi come stringa.
scomponendola:
- L'intestazione 'Content-Length' specifica quanti byte i dati HTTP POST contiene.
self.headers.getheader('Content-Length')
restituisce la lunghezza del contenuto (valore dell'intestazione) come stringa.- Questo deve essere convertito in un numero intero prima di passare come parametro a
self.rfile.read()
, quindi utilizzare la funzioneint()
.
Si noti inoltre che il nome di intestazione è case sensitive quindi ha da specificare come 'Content-Length' solo.
Edit: A quanto pare campo di intestazione non è case sensitive (almeno in Python 2.7.5), che credo sia il comportamento corretto dal https://tools.ietf.org/html/rfc2616 stati:
Ogni campo di intestazione consiste di un nome seguito da due punti (":") e il valore del campo. I nomi dei campi non fanno distinzione tra maiuscole e minuscole.
Si prega di essere più prolisso, non ho idea di cosa stai suggerendo. –
@jb: ho aggiunto più dettagli alla risposta. Fammi sapere se c'è qualcosa di specifico che deve ancora essere elaborato. –
@SindhuriKuppasad, il nome dell'intestazione non è sensibile al maiuscolo/minuscolo. Le seguenti affermazioni restituiscono entrambi la lunghezza del contenuto nei miei test: 'self.headers.getheader ('content-length')' e 'self.headers.getheader ('content-LENGTH')' – famzah
- 1. Leggi HTTP Post intestazioni
- 2. Passare i dati POST tramite HTTP non elaborato
- 3. Python: Come posso ottenere coppie chiave/valore dal gestore POST HTTP BaseHTTPRequestHandler?
- 4. Pubsubhubbub su Rails. Come estrarre il contenuto del corpo POST non elaborato dalla richiesta POST?
- 5. BaseHTTPRequestHandler con campione personalizzato
- 6. Leggi AssemblyFileVersion da AssemblyInfo post-compilazione
- 7. come servire qualsiasi tipo di file con BaseHTTPRequestHandler di Python
- 8. Come leggo più righe di input non elaborato in Python?
- 9. Scrittura del corpo di risposta con BaseHTTPRequestHandler
- 10. Leggi MP3 in Python 3
- 11. Come accedere ai dati inviati al mio server utilizzando BaseHTTPRequestHandler?
- 12. Estrazione di JSON non elaborato come stringa all'interno di una route POST Spray
- 13. Come posso POST utilizzare Java e includere parametri e un corpo di richiesta non elaborato?
- 14. leggi i valori della richiesta di post HttpHandler
- 15. Python - Leggi la seconda colonna dal file
- 16. Leggi frame da RTSP Stream in Python
- 17. Leggi il file json da python
- 18. Blocco statico non elaborato in java
- 19. Converti il vettore non elaborato nell'oggetto R
- 20. XSL: lascia passare HTML non elaborato tramite
- 21. Accesso all'oggetto XHR non elaborato utilizzando $ http
- 22. Leggi il file .tar.gz in Python
- 23. Ottenere l'indirizzo IP da HTTP Richiesta POST usando Python
- 24. Python URLLib/URLLib2 POST
- 25. Dati binari POST Python
- 26. npm non funziona - "leggi ECONNRESET"
- 27. ottiene il valore decimale non elaborato dalla query mysqldb
- 28. Come ottenere il contenuto non elaborato di una risposta nelle richieste con Python?
- 29. Process persistenti Post Python Pool
- 30. Python richiede HTTP POST multipart
Dopo aver provato e fatto qualche ricerca su google, questa operazione blocca l'esecuzione per me e per gli altri. – kwolfe
È necessario fornire la lunghezza del contenuto: data = self.rfile.read (int (self.headers.getheader ('content-length'))) – kwolfe
Sì, mi dispiace. Sta bloccando perché l'oggetto rfile è un socket, e chiamare 'read()' sta praticamente dicendo 'leggi fino a che non rimane nulla da leggere', ma c'è altro da leggere finché il socket è aperto, quindi si blocca e aspetta il contenuto in entrata . I server evitano di appendere SEMPRE specificando QUANTO QUANTITÀ di contenuti da leggere. Scusa, avrei dovuto metterlo in primo piano. – smakateer