2010-06-22 20 views
5

¿Hay una forma incorporada de obtener los parámetros POST/GET en Racket? extract-binding y amigos hacer lo que quiera, pero hay una nota grave adjunta acerca de los posibles riesgos de seguridad relacionados con la carga de archivos que concluyeFijaciones POST/GET en Raqueta

Por lo tanto, se recomienda en contra de su uso , pero se proporcionan para compatibilidad con código antiguo.

Lo mejor que puedo imaginar es (y perdóname por adelantado)

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

pero que parece innecesariamente complicado (y parece que sufriría de algunos de los mismos errores documentados en la sección de enlaces)

¿Existe una norma de forma más o menos, no con errores para obtener el valor de un/GET-variable posteriormente, dado un nombre de campo y la solicitud? ¿O mejor aún, una forma de recuperar una colección de los valores POST/GET como una lista/hash/a-list? Salvo cualquiera de ellos, ¿hay alguna función que haga lo mismo, pero solo para las variables POST, ignorando los GET?

Respuesta

3

extract-binding es malo porque no distingue entre mayúsculas y minúsculas, es muy complicado para las entradas que regresan varias veces, no tiene forma de lidiar con las cargas de archivos y automáticamente asume que todo es UTF-8, que no es t necesariamente cierto. Si puede aceptar esos problemas, siéntase libre de usarlos.

el fragmento que escribió obras cuando los datos es UTF-8 y cuando sólo hay un retorno de campo. Puede definirlo como una función y evitar escribirlo muchas veces.

En general, recomiendo usar formlets para tratar los formularios y sus valores.

Ahora sus preguntas ...

"¿Hay una manera más o menos estándar, no buggy para obtener el valor de un/GET-variable posteriormente, dado un nombre de campo y la solicitud?"

Lo que tienes es lo estándar, aunque se asume erróneamente que no es sólo un valor. Cuando hay varios, querrá filtrar los enlaces en el nombre del campo. Del mismo modo, usted no necesita para convertir el valor en una cadena, puede dejarlo como bytes muy bien.

"O mejor aún, una forma de volver una colección de POST/GET valores como una lista/almohadilla/a-lista?"

Eso es lo que hace request-bindings/raw. Es una lista de enlace? objetos. No tiene sentido convertirlo en hash debido a los retornos de múltiples valores.

"A menos que cualquiera de ellos, no es una función que haría lo mismo, pero sólo para variables POST, ignorando Obtiene?"

El servidor Web se esconde la diferencia entre los postes y obtiene de usted. Puede inspeccionar el uri y los datos de entrada en bruto para recuperarlos, pero tendría que analizarlos usted mismo. No lo recomiendo

Jay

+0

Parece que tenía un modelo ligeramente roto de cómo funciona la representación de la variable POST/GET. Por curiosidad, ¿cómo manejan los formlets este análisis sintáctico? ¿Es básicamente el mismo llamado 'vinculante: valor de forma' que tengo arriba?La razón principal por la que no fui directamente a la ruta de formlet es porque trato de comunicarme con el servidor a través de jQuery.ajax (que envía variables POST o GET, pero no necesariamente tiene elementos de formulario asociados). – Inaimathi

Cuestiones relacionadas