[問題] jQuery的.ajax

看板Python作者 (R5大小姐-EX人品崩壞)時間6年前 (2017/10/27 10:45), 6年前編輯推噓11(11021)
留言32則, 5人參與, 6年前最新討論串1/1
最近寫的小爬蟲遇到一個問題 就是網頁的表單資料是利用javascript截取之後 再利用.ajax送出去 $.ajax({ url: "my url", data: {data:value}, type: "POST", dataType: 'text', success: function (msg) { ... } }); value用console看起來長這個樣子 {base: Array(5), data: Array(7)} base: (5) ["2017-10-27", "name", "", "3", 0] data: (7) ["正常", "正常", "正常", "正常", "正常", "正常", "正常"] 不過用chrome的開發工具看了一下POST出去的資料 data[base][]:2017-10-27 data[base][]:name data[base][]: data[base][]:3 data[base][]:0 data[data][]:正常 data[data][]:正常 data[data][]:正常 data[data][]:正常 data[data][]:正常 data[data][]:正常 data[data][]:正常 data[data][]:正常 data[data][]:正常 data[data][]:正常 感覺就不太對 在python底下直接送這個也是錯的 想請問一下 jQuery裡面的ajax在POST表單的時候 他轉換成requests的payload 會長成什麼樣子? 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.120.251.134 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1509072345.A.A68.html

10/27 10:53, 6年前 , 1F
看contentType預設是x-www-form-urlencoded
10/27 10:53, 1F

10/27 10:53, 6年前 , 2F
所以長得就是像你打得那樣
10/27 10:53, 2F
但是我直接 params = {"data[base]":"2017-10-27", "data[base]":"", ...} 是失敗的

10/27 11:07, 6年前 , 3F
是不是應該用data: value就好?
10/27 11:07, 3F

10/27 11:10, 6年前 , 4F
樓上是指ajax的部分嗎
10/27 11:10, 4F

10/27 11:12, 6年前 , 5F
如果ajax是網頁原本的行為 可以參考這篇
10/27 11:12, 5F

10/27 11:12, 6年前 , 6F
因為爬的網頁原本是用ajax送資料的 他送的資料我用console print出來是長這個樣子 但是我不知道怎用成dict格式

10/27 11:13, 6年前 , 7F
你的key重複了 在dict同個key只會留一筆
10/27 11:13, 7F
所以我想知道說ajax他value裡面如果遇到array他是如何處理成post接收的資料QQ

10/27 11:15, 6年前 , 8F
10/27 11:15, 8F
嘗試過 value1 = {"base":["2017-10-27", "name", "", "3", 0], "data":["正常", "正常", "正常", "正常", "正常", "正常", "正常", "正常 ", "正常", "正常"]} value1 = urllib.urlencode(value1, True) 失敗QQ

10/27 11:26, 6年前 , 9F
value1 = {"data[base][]":["20 ... 這樣呢
10/27 11:26, 9F
value1 = {"data[base]":["2017-10-27", "name", "", "3", "0"], "data[data]":["正常", "正常", "正常", "正常", "正常", "正常", "正常", "正常", "正常", "正常"]} value1 = urllib.urlencode(value1, True) 失敗

10/27 11:35, 6年前 , 10F
data[base][]
10/27 11:35, 10F

10/27 11:36, 6年前 , 11F
這也是失敗 怪了= =
10/27 11:36, 11F

10/27 11:36, 6年前 , 12F
都是直接死在日期未填寫
10/27 11:36, 12F

10/27 11:39, 6年前 , 13F
可以看開發工具的Form Data有個view source可以按
10/27 11:39, 13F

10/27 11:39, 6年前 , 14F
看有沒有跟傳的一樣
10/27 11:39, 14F

10/27 11:39, 6年前 , 15F
10/27 11:39, 15F

10/27 11:42, 6年前 , 16F
看起來是一樣的 可能要檢查其他東西惹= =
10/27 11:42, 16F

10/27 11:50, 6年前 , 17F
把所有header都代一樣的值 再一個一個刪 看刪到哪個會掛
10/27 11:50, 17F

10/27 12:06, 6年前 , 18F
WTF 他卡住了
10/27 12:06, 18F

10/27 12:09, 6年前 , 19F
要看server端怎麼處理request,可能很多
10/27 12:09, 19F

10/27 12:10, 6年前 , 20F
先改用json去試,說不定server端沒處理formdata
10/27 12:10, 20F
主要是 我要模擬前端對server送出requests的資料就好

10/27 22:44, 6年前 , 21F
唷他在送表單的時候用另外一個{}包住了
10/27 22:44, 21F

10/27 22:45, 6年前 , 22F
他server端處理可能是req.body.data.base.data這樣
10/27 22:45, 22F

10/27 22:45, 6年前 , 23F
的深度
10/27 22:45, 23F

10/27 22:47, 6年前 , 24F
上面多打一個data 靶他視為分開
10/27 22:47, 24F

10/27 22:47, 6年前 , 25F
簡而言之你post的資料少一層
10/27 22:47, 25F

10/27 22:51, 6年前 , 26F
寫成dict 或是 object形式的話大概就是 body = {data
10/27 22:51, 26F

10/27 22:51, 6年前 , 27F
:{base:[],data:[]}}
10/27 22:51, 27F

10/27 22:53, 6年前 , 28F
可以的話可以傳網址給喔 我幫你測
10/27 22:53, 28F
好像不是這個樣子 因為這樣送出去的url怪怪的 WTF 最後解法是 原: value1 = {"data[base][]":["2017-10-28", "name", "", "3", 0], "data[data][]":["正常", "正常", "正常", "正常", "正常", "正常", "正常 ", "正常", "正常", "正常"]} value2 = urllib.urlencode(value1, True) f = res.post(get_data_url, headers = headers, param = value2) 改成: value1 = 不變 valeu2 = 不變 f = res.post(get_data_url, headers = headers, data = value2) 就可以了= = ※ 編輯: neil987 (219.68.18.225), 10/28/2017 14:33:59

10/28 14:38, 6年前 , 29F
犯了很蠢的錯QQ
10/28 14:38, 29F

10/30 16:28, 6年前 , 30F
對server端你那樣做跟我講的是一樣意思的...
10/30 16:28, 30F

10/30 16:31, 6年前 , 31F
param指的是querystring上的東西,他server端沒針對那
10/30 16:31, 31F

10/30 16:31, 6年前 , 32F
邊parse的話是不管的
10/30 16:31, 32F
文章代碼(AID): #1PyftPfe (Python)