2018-01-10:fix post 請求數據遺漏部份內容javascript
背景:java
最近在寫一個小程序,發現博主所在的地區訪問該網站時有防ddos功能驗證致使程序不能正常工做。web
通過試驗發現能夠用國外代理ip解決這個問題,可是程序走代理訪問延遲高且不穩定。ajax
思路:小程序
selenium啓動瀏覽器 => 手動經過網站ddos驗證 => 程序操控其餘業務請求跨域
問題:瀏覽器
1.selenium 不支持 post 請求方式app
2.selenium 不支持自定義 request headerpost
環境:網站
selenium:3.8.1
JDK:1.8
firefox:45.9.0esr 下載歷史版本:https://download-installer.cdn.mozilla.net/pub/firefox/releases/
解決方案:
1.寫一個本地頁面,post請求經過本地頁面的ajax請求轉發出去,ajax也支持自定義request header
問題:本地頁面轉發會在request header附帶上origin。網站對origin有校驗,致使訪問失敗
2.selenium 執行 js代碼
問題:只能執行原生js代碼
參考代碼:https://stackoverflow.com/questions/11430773/how-to-use-javascript-with-selenium-webdriver-java
WebDriver driver = new FirefoxDriver(); // 打開這個網站,防止js跨域請求(用baidu舉例) driver.get("https://www.baidu.com"); // 開啓開發者模式,方便觀察請求 Actions builder = new Actions(driver); builder.sendKeys(Keys.F12).perform(); JavascriptExecutor jse = (JavascriptExecutor) driver ; try { String resp = (String) jse.executeScript( "var xmlhttp=new XMLHttpRequest();\n" + "xmlhttp.open(\"GET\",\"https://www.baidu.com\",false);\n" + "xmlHttp.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded\");\n" + // 表單提交的頭部信息 "xmlhttp.setRequestHeader(\"testHeader\",\"123456\");\n" + // 自定義請求頭 "xmlhttp.send(\"name=test&sex=1&age=18\");\n" + // 表單數據 "return xmlhttp.responseText;"); System.out.println(resp); } catch (Exception e) { //.......... Exception }
以上,拋磚引玉。若有更好的解決方案,請留言討論,謝謝!