cqwcns 发表于 2022-11-28 15:46

JS,浏览器控制台模拟POST请求

最近在研究数据爬取,如果通过python、uibot等方式发起POST请求,很难通过登录图形验证等限制。
今天有一个新思路,就是先在浏览器完成登录,再在浏览器控制台执行JS发起Post请求,这样可以利用浏览器的鉴权。


马上付诸行动测速一下。
浏览器控制台JS代码:
$.post("http://XX.XXXX.net:27001/api/tasklist/plugin/order-plugin/variables/66928815767126", {"archived": true, "names": ["isGigabit", "addrLevel", "twoAddrName", "maintainMode", "fiveAddrId", "fiveAddrName", "hcoverMode", "addrId", "accType", "resourceType", "addrLevelType", "addrName", "newAppointment", "PONserialNo", "SevenAddrMark"]});

返回异常:
responseJSON: {type: 'NullPointerException'}
responseText: "{\"type\":\"NullPointerException\"}"


我再看一下请求情况:
发送的请求负载异常,names字段,明明传入的是一个数组。
实际请求时却是错乱的,具体见图。


所以,如果我想再浏览器控制台来执行POST请求,应该怎么写?我不知道错在哪里,请各位大佬指教,感谢。

tomhex 发表于 2022-11-28 15:47

web端的技术了解的不多,学习一下

咬字分开念 发表于 2022-11-28 15:49



爬虫遇到跨域,js是搞不定的,还得后台跨域抓取

Su、 发表于 2022-11-28 16:00

要手动改成name=xxx,name=xxx

linguo2625469 发表于 2022-11-28 16:05

$.post("http://XX.XXXX.net:27001/api/tasklist/plugin/order-plugin/variables/66928815767126", {"archived": true, "names": JSON.stringify(["isGigabit", "addrLevel", "twoAddrName", "maintainMode", "fiveAddrId", "fiveAddrName", "hcoverMode", "addrId", "accType", "resourceType", "addrLevelType", "addrName", "newAppointment", "PONserialNo", "SevenAddrMark"])});

试试

linguo2625469 发表于 2022-11-28 16:06

另外要注意数据格式 ajax默认表单发送 有可能你这个网站是json发送的

cqwcns 发表于 2022-11-28 16:12

linguo2625469 发表于 2022-11-28 16:05
$.post("http://XX.XXXX.net:27001/api/tasklist/plugin/order-plugin/varia ...

看到大佬的头像,我就知道问题已经解决了{:1_893:}

cqwcns 发表于 2022-11-28 16:17

linguo2625469 发表于 2022-11-28 16:05
$.post("http://XX.XXXX.net:27001/api/tasklist/plugin/order-plugin/varia ...

大佬,负载的类型Raw text是什么意思?如果再请求中把负载设置成Raw text。
请求的负载是正确了,还是报错。
我留意到网站请求时,负载时Raw text类型的。我手动请求是form-data。

linguo2625469 发表于 2022-11-28 16:29

cqwcns 发表于 2022-11-28 16:17
大佬,负载的类型Raw text是什么意思?如果再请求中把负载设置成Raw text。
请求的负载是正确了,还是报 ...

不清楚 不知道你说的负载是什么 浏览器上某个选项吗

Frhvjhhv 发表于 2022-11-28 16:38

由于安全原因,谷歌浏览器不允许在控制台发起post请求。所以即使没有跨域也不行。
页: [1] 2
查看完整版本: JS,浏览器控制台模拟POST请求