跨域POST访问第三方页面

本文讲述了在面临第三方网站仅支持POST请求的情况下,如何尝试通过表单提交数据来实现跨域访问。首先使用Postman测试接口,发现返回的HTML包含内部请求。然后尝试用JavaScript构造并提交表单,但由于接口需要application/json格式参数而失败。最后讨论了安全考虑,建议在后台进行关键数据交互,使用如OAuth 2.0等验证方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遇到一个在新页面中打开第三方网站,但是只提供了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等验证方式,前端持token跳转。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值