2011-06-22 10 views
5

Tengo el siguiente código:Ruby Net :: HTTP - ¿Dejar de escalar automáticamente las comillas?

http = Net::HTTP.new("www.something.com", 80) 
    http.set_debug_output($stdout) 
    http.post("/blah", "something", {'random-parameter' => 'value1="something",value2="somethingelse"'}) 

Luego, cuando leí la salida de la salida estándar, que se parece a esto:

<- "POST /blah HTTP/1.1\r\nAccept: */*\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: close\r\nrandom-parameter: value1=\"something\",value2=\"somethingelse\"\r\nContent-Length: 9\r\nHost: www.something.com\r\n\r\n" 
<- "something" 

con las comillas que se escaparon. El problema es que las barras parecen ser enviadas al servidor, lo que no le gusta. Estoy consiguiendo un error que dice

Unknown value for random-parameter in header: {value1=\\\"something\\\"value2=\\\"somethingelse\\\"} 

Así que mi pregunta es, hay una manera de decir Net :: HTTP no para insertar esas barras, o tira hacia fuera antes de enviar la cabecera?

Aclaraciones:

que estoy usando Rubí 1.8.7 con rieles 2.0.2.

Creo que pueden ser los Rails los que escapan de los personajes, pero no estoy seguro de cómo detenerlos.

Respuesta

2

¿Estás seguro de que estás construyendo el encabezado correctamente? Net :: HTTP no cotiza comillas al enviar la solicitud. Se puede verificar fácilmente mediante el uso de, por ejemplo netcat (nc):

Terminal 1:

> nc -v -l -p 2323 

Terminal 2 (en el IRB):

> http = Net::HTTP.new("localhost", 2323) 
> http.post("/blah", "something", {'random-parameter' => ...) 

Resultado (en la terminal 1):

listening on [any] 2323 ... 
connect to [127.0.0.1] from localhost [127.0.0.1] 37598 
POST /blah HTTP/1.1 
Connection: close 
Accept: */* 
Random-Parameter: value1="something",value2="somethingelse" 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 9 
Host: localhost:2323 

something 

Creo que lo que realmente querrías hacer (no estoy seguro, pero supongo) es algo más parecido al HTTP especificaciones:

> http.post("/blah", "something", { 
    'random-parameter' => 'value1="something"; value2="somethingelse"' }) 

Rails es, probablemente, interpretando su primera valor1 = ... como a toda la value..when es probable que necesite para separar los valores con ';', no ''.

También tenga en cuenta que no suele pasar parámetros a través de encabezados de solicitud. Pero tal vez eso es lo que quiere hacer en este caso (?) De lo contrario, debe pasar los parámetros en la propia URL como param1 = foo & param2 = bar, o usar x-www-form-urlencoded para pasar los parámetros.

ver aquí para una hoja de trucos:
http://www.rubyinside.com/nethttp-cheat-sheet-2940.html

0

No es el problema que sus pares de nombre/valor son el valor para "random-parameter", por lo tanto, deben escaparse.

Espero que cuando inspeccione el valor del parámetro aleatorio en el método del controlador que no tiene las barras diagonales, ¿puede depurar el código o imprimir el parámetro para ver qué se está recibiendo?

Cuestiones relacionadas