2015-09-28 69 views
0

我有一個Python 3.4 CherryPy Web應用程序,它帶有一個在YouTube URL上執行一些處理的POST。CherryPy通過URL將查詢參數作爲POST中的單個參數使用

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的對待這個查詢參數(&列表)作爲查詢參數給我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) + '"'); 
+0

難道你不能只用base64在[btoa](https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/btoa)的url中進行編碼嗎?在python中使用[this](https://docs.python.org/2/library/base64.html)來解碼它。 – RickyA

+0

你確定你正在使用POST嗎?我可以看到發佈它的javscript代碼嗎?你提到你正在使用'encodeURI'函數。 – cyraxjoe

+0

我將用Javascript代碼編輯問題。 @RickyA我會嘗試,謝謝。 – Sevag

回答

0

urlString變量是作爲一個URL組件,因此您應該encodeURIComponent而不是encodeURI編碼。 This SO答案回答了他們的差異以及何時使用它們。

+0

btoa和encodeURIComponent都可以工作,但是使用btoa我需要Python端的代碼來處理它,所以我更喜歡這個解決方案。 – Sevag