2010-06-22 13 views
5

Esiste un modo integrato per ottenere i parametri POST/GET in Racket? extract-binding e amici fare quello che voglio, ma c'è una nota terribile attaccato sui potenziali rischi per la sicurezza legati a file caricati che concludebinding POST/GET nella racchetta

Pertanto, si consiglia contro il loro uso, ma sono previste compatibilità con il vecchio codice.

Il meglio che posso immaginare è (e mi perdoni in anticipo)

(bytes->string/utf-8 (binding:form-value (bindings-assq (string->bytes/utf-8 "[field_name_here]") (request-bindings/raw req)))) 

ma che sembra inutilmente complicato (e sembra che soffrirebbe di alcuni degli stessi errori documentati nella sezione Associazioni).

C'è un modo più o meno standard e non buggato per ottenere il valore di una variabile POST/GET, dato un nome di campo e una richiesta? O meglio ancora, un modo per recuperare una raccolta dei valori POST/GET come lista/hash/a-list? Escludendo uno di questi, esiste una funzione che farebbe lo stesso, ma solo per le variabili POST, ignorando i GET?

risposta

3

L'associazione di estrazione è errata perché non fa distinzione tra maiuscole e minuscole, è molto caotica per gli input che restituiscono più volte, non ha un modo di gestire i caricamenti di file e assume automaticamente tutto ciò che è UTF-8, che non è necessariamente vero. Se puoi accettare questi problemi, sentiti libero di usarlo.

Lo snippet che hai scritto funziona quando i dati sono UTF-8 e quando c'è solo un ritorno di campo. È possibile definire che è una funzione ed evitare di scriverlo molte volte.

In generale, si consiglia di utilizzare formule per gestire moduli e relativi valori.

Ora le vostre domande ...

"C'è un modo più o meno standard, non-buggy per ottenere il valore di un/GET-variabili POST, dato un nome di campo e la richiesta?"

Quello che si ha è la cosa standard, anche se si assume erroneamente che esiste un solo valore. Quando ci sono più, ti consigliamo di filtrare i collegamenti sul nome del campo. Allo stesso modo, non è necessario per convertire il valore in una stringa, è possibile lasciarlo come byte correttamente.

"O meglio ancora, un modo per recuperare una raccolta dei valori POST/GET come elenco/hash/a-list?"

Questo è ciò che fa la richiesta-binding/raw. È una lista di rilegature? oggetti. Non ha senso trasformarlo in un hash a causa di più ritorni di valore.

"Escludendo uno di questi, esiste una funzione che farebbe lo stesso, ma solo per le variabili POST, ignorando i GET?"

Il server Web nasconde la differenza tra POST e GET. Puoi controllare uri e i dati grezzi dei post per recuperarli, ma dovresti analizzarli da soli. Non lo consiglio

Jay

+0

Sembra che ho avuto un modello leggermente rotto di come funziona la rappresentazione variabile POST/GET. Per curiosità, in che modo le formule gestiscono questo parsing? È fondamentalmente la stessa chiamata 'binding: form-value' che ho sopra?Il motivo principale per cui non ho seguito la rotta formlet è che sto cercando di comunicare con il server attraverso jQuery.ajax (che invia variabili POST o GET, ma non ha necessariamente elementi di forma associati). – Inaimathi