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

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

基于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路径正确定义。

引用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接口,并根据返回的响应结果进行处理。

结合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 域名发送请求并接收返回的数据,实现两个域名间的后端交互。

  • 这个问题的回答你可以参考下: 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()