El carácter de barra diagonal finaliza la variable en python/html
raspberry-pi webiopi (2)
La fuente relevante es do_POST
en la línea 180 aquí .
Específicamente aviso:
paths = relativePath.split("/")
if len(paths) > 2:
value = paths[2]
Donde el value
finalmente se pasa a su macro. Muestra que cualquier cosa pasada la segunda /
es descartada. Como un aparte, parece que puedes poner argumentos separados en la url y se aprobarán posicionalmente.
Su mejor opción es, probablemente, escapar de la cadena en javascript antes de enviarlo y descomprimirlo en su macro. Parece que deberá escapar de todos los caracteres inseguros de la url, /
, y,.
Estoy tratando de pasar una URL a una variable en python (youtube url del video que se reproducirá en la Raspberry Pi), pero en algún punto del camino el carácter de barra diagonal se interpreta como un final de la cadena / variable. Entonces, en lugar de obtener " http://www.youtube.com/watch?v=5NV6Rdv1a3I ", obtengo "http:".
Estoy usando el servidor WebIOPi para mostrar una página web en html que contiene un área de texto. Cuando hago clic en un botón en la página web, se llama a la función sendLink () y el texto del área de texto pasa como un argumento.
Contenido de index.html:
function sendLink() {
var text = $(''textarea#videolink'').text();
webiopi().callMacro("playVideo", text);
}
...
<textarea rows="1" cols="30" id="videolink">Enter YouTube link here</textarea>
La función callMacro llama a una macro llamada playVideo, escrita en otro script en python:
@webiopi.macro
def playVideo(text):
print (text)
webiopi.debug(text)
Cuando ingreso "a / b / c" en el área de texto y hago clic en el botón, solo se muestra "a" en print y webiopi.debug, aunque la información general de depuración que se muestra junto con ella dice "POST / macros / playVideo". / a / b / c HTTP / 1.1 "200, que creo que significa que la variable se pasa a la función correctamente.
(Idea para enviar texto ingresado en el área de texto tomada aquí: http://timcorrigan.com/raspberry-pi-tracked-robot-streaming-video-and-text-to-speech/ )
¿Cómo puedo solucionar esto? Cualquier solución es apreciada.
Resolví el problema. Si bien la respuesta de kalhartt no se aplicaba por completo a mi problema, esta parte me hizo pensar:
Su mejor opción es, probablemente, escapar de la cadena en javascript antes de enviarlo y descomprimirlo en su macro. Parece que deberá escapar de todos los caracteres inseguros de la url, /, y,.
Como escribí en mi pregunta original, WebIOPi llama a macros como este
POST /macros/playVideo/a/b/c HTTP/1.1
donde "playVideo" es la macro que se está llamando y nada aquí
/macros/playVideo/argument/
es un argumento para pasar a la macro. El argumento solo depende de la barra diagonal siguiente, porque después de esa barra no hay más categorías (usó una barra inclinada para decir que iba a llamar una macro, otra barra inclinada para decir el nombre de la macro, la tercera barra inclinada para pasar argumentos, y el cuarto para ... ¿qué?).
Esta es la razón por la cual cualquier cosa después de un corte directo se cortaba. Resolví el problema reemplazando todas las barras diagonales en javascript con
text = text.replace(////g,"fslash");
y luego reemplazando "fslash" con "/" en el script de python que supuestamente recibiría el argumento. También reemplacé los signos de interrogación, ya que también estaban causando problemas.