CherryPy 在 POST 中将查询参数作为单个参数传递 URL
CherryPy passing URL with query params as single parameter in POST
我有一个 Python 3.4 CherryPy 网络应用程序 POST 在 YouTube URL.
上进行一些处理
POST localhost:8080/api/url=https://www.youtube.com/watch?v=WS6-vI70oc0
如果我使用带有查询参数的 YouTube URL,例如:
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 并用“”包围整个 URL,这并没有改变 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) + '"');
urlString
变量作为 url 组件,因此您应该使用 encodeURIComponent
而不是 encodeURI
对其进行编码。 This SO回答回答了它们的区别以及何时使用它们。
我有一个 Python 3.4 CherryPy 网络应用程序 POST 在 YouTube URL.
上进行一些处理POST localhost:8080/api/url=https://www.youtube.com/watch?v=WS6-vI70oc0
如果我使用带有查询参数的 YouTube URL,例如:
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 并用“”包围整个 URL,这并没有改变 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) + '"');
urlString
变量作为 url 组件,因此您应该使用 encodeURIComponent
而不是 encodeURI
对其进行编码。 This SO回答回答了它们的区别以及何时使用它们。