onhuko 2023-04-23 12:54 采纳率: 58.3%
浏览 30
已结题

两个域名间的后端如何进行交互呢

两个域名间的后端如何进行交互呢?就是A域名向B域名发送请求,B域名返回结果给A域名,假设都是用Flask框架

  • 写回答

4条回答 默认 最新

  • Monster-XH 2023-04-23 13:06
    关注

    基于Monster 组和GPT的调写:

    • 在 Flask 中,你可以使用 requests 模块向另一个域名的后端发送请求,获得响应,然后将响应传回给调用者。假设A域名的后端服务需要向B域名的后端服务发送POST请求,获取B域名的某个API的结果:

    A域名的后端服务代码:

    import requests
    from flask import Flask, jsonify
    
    app = Flask(__name__)
    
    @app.route('/get_result')
    def get_result():
        # 向B域名发送POST请求
        url = 'http://B域名的IP地址或域名/需要调用的API路径'
        payload = {'param1': 'value1', 'param2': 'value2'}
        headers = {'Content-Type': 'application/json'}
        response = requests.post(url, json=payload, headers=headers)
        # 获取B域名返回的结果并返回给前端
        result = response.json()
        return jsonify(result)
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000)
    
    
    

    B域名的后端服务代码:

    from flask import Flask, request, jsonify
    
    app = Flask(__name__)
    
    @app.route('/some_api', methods=['POST'])
    def some_api():
        # 获取A域名发送过来的POST请求中的参数
        param1 = request.json['param1']
        param2 = request.json['param2']
        # 执行某些操作,返回结果
        result = {'result1': 'value1', 'result2': 'value2'}
        return jsonify(result)
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000)
    
    
    
    • 在A域名的后端服务中,我们定义了一个/get_result的API,当有客户端调用该API时,会向B域名发送POST请求,然后将B域名返回的结果返回给客户端。
    • 在B域名的后端服务中,我们定义了一个/some_api的API,当A域名的后端服务向它发送POST请求时,会获取POST请求中的参数,然后执行某些操作,最后返回结果给A域名的后端服务。
    • 需要注意的是,A域名的后端服务中向B域名发送POST请求时需要提供正确的IP地址或域名和API路径,B域名的后端服务需要将API路径正确定义。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • Zyb0627 2023-04-23 13:08
    关注

    引用chatGPT作答,在Flask框架中,可以使用Python内置的requests库来实现不同域名之间的交互。具体来说,可以在A域名的后端代码中发送一个HTTP请求到B域名的API接口,然后在B域名的后端代码中处理这个请求并返回响应结果给A域名。

    以下是一个简单的示例,假设A域名为http://www.domain-a.xn--com%2Cbwww-1g0m349bmhk.domain-b.com:/

    在A域名的后端代码中发送请求:

    import requests
    
    response = requests.get('http://www.domain-b.com/api/some_endpoint')
    if response.status_code == 200:
        data = response.json()
        # 处理返回的数据
    else:
        # 处理错误情况
    

    在B域名的后端代码中处理请求并返回响应:

    from flask import Flask, jsonify
    
    app = Flask(__name__)
    
    @app.route('/api/some_endpoint')
    def some_endpoint():
        # 处理请求
        data = {'foo': 'bar'}
        return jsonify(data)
    
    if __name__ == '__main__':
        app.run()
    

    在B域名的后端代码中,定义了一个API接口/api/some_endpoint,当收到来自A域名的HTTP请求时,会调用some_endpoint()函数来处理请求并返回JSON格式的响应数据。在A域名的后端代码中,使用requests库发送HTTP请求到B域名的API接口,并根据返回的响应结果进行处理。

    评论
  • AllenGd 大数据领域优质创作者 2023-04-23 13:17
    关注

    结合ChatGPT和自己的理解:

    可以使用 Flask 的 HTTP 客户端请求库来实现两个域名间的后端交互。具体步骤如下:

    1. 在 A 域名的 Flask 应用中定义一个路由,用于接收 B 域名返回的数据,例如:
    from flask import Flask, request
    
    app = Flask(__name__)
    
    @app.route('/callback', methods=['POST'])
    def callback():
        data = request.get_json()
        # 处理返回的数据
        return 'OK'
    
    1. 在 A 域名的 Flask 应用中使用 HTTP 客户端请求库向 B 域名发送请求,例如:
    import requests
    
    url = 'http://example.com/api'
    data = {'param1': 'value1', 'param2': 'value2'}
    response = requests.post(url, json=data)
    
    if response.status_code == requests.codes.ok:
        # 请求成功,处理返回的数据
        data = response.json()
    else:
        # 请求失败
        pass
    
    1. 在 B 域名的 Flask 应用中定义一个 API,用于处理 A 域名的请求并返回数据,例如:
    
    from flask import Flask, request, jsonify
    
    app = Flask(__name__)
    
    @app.route('/api', methods=['POST'])
    def api():
        data = request.get_json()
        # 处理请求的数据
        result = {'result': 'success'}
        return jsonify(result)
    

    通过以上步骤,A 域名就可以向 B 域名发送请求并接收返回的数据,实现两个域名间的后端交互。

    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-23 16:56
    关注
    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7510574
    • 这篇博客也不错, 你可以看下【Flask项目2】站内消息模型类设计、发送站内消息接口开发、查询当前用户收到的信息列表开发以及项目中的分页操作(16)
    • 除此之外, 这篇博客: 单击“登录”后,用户名和密码显示在地址栏中,不安全中的 flask获取参数方式: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
      1. request.form.get("key", type=str, default=None) 获取表单数据
      2. request.args.get("key") 获取get请求参数
      3. request.values.get("key") 获取所有参数(万能通用——推荐使用),支持获取表单(get、post、delete均支持)及Ajax请求中的数据。
      4. 获取解析json数据格式也可以使用request.get_json()(需要设置contentType: "application/json;charset=utf-8")。    
      $.ajax({
                        type: 'POST',
                        url: '/sql_lab/execute_sql',
                        data: JSON.stringify( {sql: editor.getValue(), strategy: 'render_json', database: $('#database-picker').val()}),
                        dataType: "json",
                        contentType: "application/json; charset=utf-8",
                     
                    })
      

      服务端

      data = request.get_json()  

    • 您还可以看一下 黄勇老师的2022版-Flask零基础到项目实战-学完可就业课程中的 47-搜索功能实现小节, 巩固相关知识点
    • 以下回答由chatgpt基于相关博客总结生成:

      答案:

      要让A域名向B域名发送请求并获取响应结果,可以使用Flask框架中内置的requests库进行发送请求和获取响应的操作。具体实现步骤如下:

      1. 首先,在A域名的Flask应用中引入requests库:
      import requests
      
      1. 接着,定义一个向B域名发送请求的函数,并在函数中使用requests库发送请求,并获取响应结果:
      def send_request():
          url = "http://B_domain.com/api/data"
          response = requests.get(url)
          response_data = response.json()
          return response_data
      

      其中,url为B域名的API接口地址,可以根据需求进行修改。requests.get(url)表示向该地址发送GET请求,response为响应对象,通过response.json()方法获取响应结果并返回。

      1. 最后,在A域名的Flask应用中定义一个路由来调用该函数,并将响应结果返回:
      @app.route('/get_data_from_b')
      def get_data_from_b():
          data_from_b = send_request()
          return data_from_b
      

      其中,/get_data_from_b为路由地址,可根据需要进行修改。data_from_b为从B域名获取到的数据,返回给客户端进行展示即可。

      需要注意的是,A域名的Flask应用需要拥有访问B域名API的权限,否则将无法正常获取数据。另外,在跨域访问时可能会产生CORS问题,需要在B域名的API中进行相关设置,允许A域名进行跨域访问。

      代码示例见下:

      import requests
      from flask import Flask
      
      app = Flask(__name__)
      
      def send_request():
          url = "http://B_domain.com/api/data"
          response = requests.get(url)
          response_data = response.json()
          return response_data
      
      @app.route('/get_data_from_b')
      def get_data_from_b():
          data_from_b = send_request()
          return data_from_b
      
      if __name__ == '__main__':
          app.run()
      
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月1日
  • 已采纳回答 4月23日
  • 创建了问题 4月23日

悬赏问题

  • ¥50 burgers方程求逆
  • ¥15 matlab最小二乘法拟合非线性曲线提问
  • ¥15 电脑锁屏时vba运行SAP,excel数据不能复制到SAP
  • ¥50 74LS系列 74LS00 74LS04设计一个RS485电路(关键词-差分)
  • ¥30 各位help写一下代码
  • ¥15 在运行SDEdit模型下载不了
  • ¥15 求51控制l298n驱动的小车中超声波避障怎么写
  • ¥15 电脑连上WIFI却用不了
  • ¥30 MATLAB在RLC电路的固有响应和阶跃响应GUI仿真报告
  • ¥15 hyper-v出现的问题