2015-12-02 50 views
0

我有相當多的麻煩獲取正確的表單數據通過POST與請求(2.8.1)模塊保存到服務器。Python請求POST以形成記錄不正確的有效載荷(複選框)

我有以前的代碼,它完全符合我的要求:它將一串key:value對編碼爲正確的header:value有效負載字典格式,併成功發送到URI。我得到了200個迴應(我正在尋找),而且一切都很好。

這是舊有效載荷編碼功能的一部分,爲簡潔起見,省略了大量的key:value對。

注意:該複選框值集合可以是數字的1和25之間的任何序列,我剛寫它作爲

項在範圍(1,5)

以表明列表由INT數,即[ "", 1, 2, 3, 4, 5,...][ "", 2, 7, 5, 1, 25,...]

checkboxList = ["",] 
for item in range(1,5): 
    checkboxList.append(item) 
payload['checkbox[ids][]'] = checkboxList 
... 
response = request.post(data_url, data=payload) 
>> 200 OK! 

以下是有效載荷字典(複選框)廁所的打印KS像,然後再將其發送給服務器:

{... 「複選框[IDS] []」:[ 「」,2,17,20,5],...}

當我用瀏覽器查看頁面時,所有有效負載信息都已被正確記錄(上面省略),並且複選框(如上所示)是正確的!

最初,複選框值來自excel文件,其餘信息在發送到服務器之前放入有效內容中。但是,現在我正在從SQLite數據庫中檢索信息。

以下是錯誤地記錄複選框的新代碼。我應該注意到:我沒有訪問服務器的權限,所以我不能輕易判斷它是否是服務器問題,但讓我們假設它不是服務器故障。我以前有過這個問題,但是我已經將它用於上面的代碼。但是,現在我已經開始將所需的值存儲在數據庫中,我無法獲取服務器記錄的正確複選框。

應該像這樣從數據庫中列的數據,如:

12-5-1-22-4

(......我知道這是不是偉大實踐DB MGMT,但我認爲這不是爲什麼POST被記錄了錯誤的數據,我想這個問題是儘可能接近代表性的我的代碼越好。)

checkList = checkboxesFromDB.split('-') 
payload['checkbox[ids][]'] = checkList 
... 
response = request.post(data_url, data=payload) 
>> 200 OK! 

當我在現場看與b rowser,它會錯誤地記錄複選框。現在,我要指出,3個複選框都不管我傳遞給payload[checkbox[ids][]]

選擇它總是相同的3,不正確的複選框,即使我完全從有效載荷字典省略checkbox[ids][]。知道這一點,我們可以承擔其服務器問題。但是,上面幾乎精確的代碼工作(當我從Excel文件中獲取信息時)。

我試過以下(只有一個值作爲測試)沒有得到由服務器記錄的正確複選框:

payload['checkbox[ids][]'] = '1' 
payload['checkbox[ids][]'] = 1 
payload['checkbox[ids][]'] = [1] 
payload['checkbox[ids][]'] = ["",1] 
payload['checkbox[ids][]'] = [1,""] 

當上傳圖像到同一臺服務器,我有一個編碼問題,當從數據庫檢索圖像BLOB,並嘗試將緩衝區對象直接傳遞給請求作爲文件,但我用cStringIO編碼來解決這個問題。 (它花了我的時間,因爲我真的對編程很陌生,仍然不確定語法,更不用說處理這種東西的方法了......)我想我可能會遇到類似的編碼問題,但是通過測試和我已經完成的研究,我無法確定任何一種方式,因爲我覺得自己有點過頭了。

如果這完全是NOOB,我很抱歉,但我已經做了大量的研究,嘗試了許多我能想到的不同的東西。我嘗試傳遞字符串,列表,字典,強制列表編碼爲utf-8。

我很困惑的主要原因是我的原始代碼工作,我的新代碼幾乎相同,但沒有。我能想到的唯一真正的區別是現在我的信息來自SQLite db(這個特殊的複選框列是TEXT類型)

任何人都可以幫助我,或者指向一個新的方向我沒有想到/瞭解?

回答

0

我經歷了所有的​​對發現它是一個HTML問題。

我在我的SQLite數據庫(通過BeautifulSoup沒有美化它)中保存HTML爲TEXT。然後我檢索它並以字符串形式發送。這是拋出服務器響應。

我已經將該sql列值類型換成VARCHAR(這對我來說是最好的),並在保存到db之前將它作爲foo = bar.prettify(formatter="html")進行了美化。現在,當我檢索該值並將其傳遞給​​時,一切正常。

相關問題