3

我正在尝试将 URL 传递给 python 中的变量(要在 Raspberry Pi 上播放的视频的 youtube url),但是在某处正斜杠字符被解释为字符串/变量的结尾。因此,我得到的不是“ http://www.youtube.com/watch?v=5NV6Rdv1a3I ”,而是“http:”。

我正在使用 WebIOPi 服务器以包含 textarea 的 html 格式显示网页。当我单击网页上的按钮时,将调用函数 sendLink() 并将 textarea 中的文本作为参数传递。

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>

函数 callMacro 调用一个名为 playVideo 的宏,用 python 的另一个脚本编写:

@webiopi.macro
def playVideo(text):
    print (text)
    webiopi.debug(text)

当我在 textarea 中输入“a/b/c”并单击按钮时,打印和 webiopi.debug 仅显示“a”,即使随之显示的一般调试信息显示“POST /macros/playVideo /a/b/c HTTP/1.1" 200,我相信这意味着变量正在正确地传递给函数。

(将输入文本区域的文本发送到此处的想法:http: //timcorrigan.com/raspberry-pi-tracked-robot-streaming-video-and-text-to-speech/

我该如何解决这个问题?任何解决方案表示赞赏。

4

2 回答 2

1

相关来源do_POST第 180 行。

具体通知:

paths = relativePath.split("/")
if len(paths) > 2:
    value = paths[2]

最终将在哪里value传递给您的宏。它表明任何超过秒的东西都/被丢弃了。顺便说一句,您似乎可以在 url 中用逗号分隔参数,它们将按位置传递。

您最好的选择可能是在发送之前在 javascript 中转义字符串并在宏中取消转义。看起来您需要转义所有 url 不安全字符/、 和,.

于 2013-12-25T05:40:54.647 回答
0

我解决了这个问题。虽然 kalhartt 的回答并不完全适用于我的问题,但这部分让我思考:

您最好的选择可能是在发送之前在 javascript 中转义字符串并在宏中取消转义。看起来您需要转义所有 url 不安全字符、/ 和 ,。

正如我在原始问题中所写,WebIOPi 像这样调用宏

    POST /macros/playVideo/a/b/c HTTP/1.1

其中“playVideo”是被调用的宏以及此处的任何内容

    /macros/playVideo/argument/

是要传递给宏的参数。参数只取决于它后面的正斜杠,因为在那个斜杠之后没有更多的类别(你用一个斜杠表示你要调用一个宏,另一个斜杠表示宏的名称,第三个斜杠表示传递参数,第四个是为了……什么?)。

这就是为什么正斜杠之后的任何内容都被切断的原因。我通过将javascript中的所有正斜杠替换为

     text = text.replace(/\//g,"fslash");

然后在应该接收参数的python脚本中用“/”替换“fslash”。我还替换了问号,因为这些也会引起问题。

于 2014-01-17T19:57:57.843 回答