V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Get Google Chrome
Vimium · 在 Chrome 里使用 vim 快捷键
id4alex
V2EX  ›  Chrome

chrome api 请求结果转发到外部 api 接口上跨域问题

  •  
  •   id4alex · 341 天前 · 884 次点击
    这是一个创建于 341 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用油猴脚本,安装本地,想把某个数据接口转发到 localhost 的服务上,但是转发时候会有跨域问题,有解决方法吗?

    // ==UserScript==
    // @name         iwencai api 拦截
    // @namespace    http://tampermonkey.net/
    // @description  使用 ajaxhook , 拦截全局网络请求.
    // @version      0.1
    // @author       Plzbefat
    // @match        #target match#
    // @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/ajaxhook.min.js
    // @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/axios.min.js
    // @grant        none
    // @downloadURL https://update.greasyfork.org/scripts/432519/js%E6%8B%A6%E6%88%AA%E5%85%A8%E5%B1%80%E7%BD%91%E7%BB%9C%E8%AF%B7%E6%B1%82.user.js
    // @updateURL https://update.greasyfork.org/scripts/432519/js%E6%8B%A6%E6%88%AA%E5%85%A8%E5%B1%80%E7%BD%91%E7%BB%9C%E8%AF%B7%E6%B1%82.meta.js
    // ==/UserScript==
    
    (function() {
        'use strict';
        ah.proxy({
            //请求发起前进入
            onRequest: (config, handler) => {
                //console.log("发生请求,请求地址:"+config.url)
                handler.next(config);
            },
            //请求发生错误时进入,比如超时;注意,不包括 http 状态码错误,如 404 仍然会认为请求成功
            onError: (err, handler) => {
                //console.log("发生错误,错误信息:"+err.type)
                handler.next(err)
            },
            //请求成功后进入
            onResponse: (response, handler) => {
              if(response.config.url == '#target url#'){
                 console.log("请求成功,反馈信息:"+response.response)
                 handler.next(response)
                    axios.post('http://localhost:8080/test',response.response);
              }
            }
        })
    })();
    
    3 条回复    2023-12-10 16:08:00 +08:00
    yin1999
        1
    yin1999  
       341 天前   ❤️ 1
    本地的 HTTP 服务器上面配置一下预检请求( OPTIONS )和 POST 请求的响应标头(主要是 Access-Control-Request-Method 和 Access-Control-Allow-Origin 这两个标头)。如果你无法配置用到的 HTTP 服务器的,那就另起一个本地的 HTTP 代理来转发请求。

    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS
    falcon05
        2
    falcon05  
       341 天前 via iPhone   ❤️ 1
    我记得 chrome 里的扩展有可以跨域的 API ,不要用浏览器那个 xhr ,用油猴的 GM_xmlhttpRequest() 试试。
    id4alex
        3
    id4alex  
    OP
       341 天前
    @yin1999 ,感谢回复。 用 nodejs 挂了个代理测试了下,确实 OK 了, 点赞!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2785 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 13:08 · PVG 21:08 · LAX 05:08 · JFK 08:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.