预检请求 OPTIONS preflight python 解决办法
问题来源与 某易论坛问答区 提问的接口问题
原帖链接:https://bbs.125.la/forum.php?mod=viewthread&tid=14763950
网站链接:[https://visa.vfsglobal.com/chn/zh/ita/login](http://)
接口链接:[https://lift-api.vfsglobal.com/master/nationality/zh-CN](http://)
什么是预检请求:
参考链接:https://blog.csdn.net/sinat_36521655/article/details/104800906?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-104800906-blog-124342081.pc_relevant_aa&spm=1001.2101.3001.4242.3&utm_relevant_index=7
提问者 遇到 接口问题 浏览器可以正常返回数据 使用puython request 请求书据返回403*
浏览器 正常访问 返回接口信息如下:

注意图片里面的 OPTIONS preflight

这里是触发了预检请求 参考上面 什么是预检请求 链接
由于浏览器在请求数据之前 会触发预检 在请求数据之前 会发送一个 OPTIONS 包 给服务器
告诉服务器 我要 获取数据了
请求获取数据 的请求是 以 GET/POST 方式请求的
请求格式是 json/或者是其他
来源地址是 https://*******
服务器接受到这个 预检请求(OPTIONS )包后 会判断你是否通过请求或者拒接请求
服务器 响应通过 后 在返回 header 头里 包含一下信息
在这个 里面 包含 允许的域名 Access-Control-Allow-Origi
之后 浏览器会发生 请求包 服务器 会正常返回
但是在python 里面 requests 库访问的是后 构造一个这样的请求是 失败的 原因不知道
可能是我技术问题
为了解决这个问题我 使用的 python selenium 库 来操作 chrome 浏览器 来获取数据
下面是代码部分 :
此贴作为记录贴 以防之后忘掉
其他的我就不做多解释了 为了解决这个问题翻阅了大量的 文章 哎
chromedevtools工具的开发文档:
https://chromedevtools.github.io/devtools-protocol/tot/Network/
selenium webdriver 模块的开发文档:https://www.selenium.dev/zh-cn/documentation/webdriver/
selenium 获取请求数据文章链接:
https://blog.csdn.net/weixin_45081575/article/details/126551260?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167656009916800182770241%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167656009916800182770241&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-126551260-null-null.142^v73^insert_down3,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=selenium%E8%8E%B7%E5%8F%96%E6%8E%A5%E5%8F%A3%E6%95%B0%E6%8D%AE&spm=1018.2226.3001.4187