CherryPy在POST中将带有查询参数的URL作为单个参数传递

时间:2015-09-28 09:49:16

标签: python python-3.x cherrypy

我有一个带有POST的Python 3.4 CherryPy Web应用程序,可以对YouTube网址进行一些处理。

POST localhost:8080/api/url=https://www.youtube.com/watch?v=WS6-vI70oc0

如果我使用带有查询参数的YouTube网址,例如:

POST localhost:8080/api/url=https://www.youtube.com/watch?v=WS6-vI70oc0&list=RDGMEM_v2KDBP3d4f8uT-ilrs8fQVMWS6-vI70oc0

CherryPy将此查询参数(& list)视为POST API的查询参数。我的API输出:

def POST(self, youtube_url=None, **kwargs):
    print('YOUTUBE URL: %s'%youtube_url)
    print('kwargs: %s'%kwargs)

输出:

YOUTUBE URL: https://www.youtube.com/watch?v=WS6-vI70oc0
kwargs: {'list': 'RDGMEM_v2KDBP3d4f8uT-ilrs8fQVMWS6-vI70oc0"'}

但是我想将整个字符串视为youtube_url,而没有CherryPy自动将&符号部分分隔为查询参数。

在Javascript方面,我尝试使用encodeURI并使用""包围整个网址,这并没有改变CherryPy的行为。

Javascript / HTML方面:

//input box in HTML:
<input type="text" class="form-control" id="youtubeUrlString" value="https://www.youtube.com/watch?v=2XNEmxl2rYs" style="height: 34px">

//get input box value in javascript and post
var urlString = document.getElementById('youtubeUrlString').value;
req.open('POST', api_url + '?youtube_url=' + encodeURI(urlString) + '"');

1 个答案:

答案 0 :(得分:0)

urlString变量是一个网址组件,因此您应该使用encodeURIComponent而不是encodeURI对其进行编码。 This所以答案会回答它们的不同以及何时使用它们。