跨域POST訪問第三方頁面

遇到一個在新頁面中打開第三方網站,但是隻提供了POST請求的需求。

首先要吐槽第三方網站只提供POST請求,簡直****!

1、接口測試

    首先用postman測試接口,返回html文檔,第三方接口用POST請求,默認對方返回的是靜態頁面,將結果寫入新窗口即可;代碼測試發現該html文檔是第三方系統內部訪問的頁面,有很多該系統的請求。

2、解決方案

    表單可以用POST請求向第三方網站提交數據,嘗試js內部構造form表單,並提交

const url = '{address}/index_new.php/Login';
const tempForm = document.createElement('form');
tempForm.action = url;
tempForm.target = '_blank';
tempForm.method = 'post';
tempForm.style.display = 'none';

for (const x in argument) {
  const opt = document.createElement('input');
  opt.type = 'hidden';
  opt.name = x;
  opt.value = argument[x];
  tempForm.append(opt);
}
document.body.appendChild(tempForm);
tempForm.submit();
document.body.removeChild(tempForm);

成功打開新窗口,document.domain = {address},但該接口只接受application/json格式參數,表單POST請求參數默認爲application/x-www-form-urlencoded。至此發現對方接口不可行,只能和對方溝通修改接口。

對方無論如何不接受提供GET請求,只能要求對方修改該請求參數爲application/x-www-form-urlencoded類型。

form提交打開的新窗口,打開控制檯,刷新後network窗口可以看到form提交的數據。如百度搜索163,在百度頁面輸入163郵箱的賬號密碼登錄,form提交跳轉到163郵箱登錄頁面,如果登錄失敗,即可如此查看;如果登錄成功,163返回一個token,做一次重定向,直接跳轉到個人郵箱主頁。當然,如果抓包,還是能監測到form請求的信息——而且是明文。

因此,考慮到安全因素,儘量與第三方系統在後臺完成關鍵數據的交互,比如使用Author2.0等驗證方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章