PHP:接口请求与被请求

这篇具有很好参考价值的文章主要介绍了PHP:接口请求与被请求。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

A-系统:请求页面(使用的php请求)

<!-- 这里是获取调用数据 -->

<?php
//连接数据库
require_once 'get_db_conn.php';
$conn = db_connect();
//提交表单
if (isset($_POST['Save'])) {
    //传入api
    $url = 'http://XXX/project/api/external/test.php';
    //请求头
    $headers = array(
        'Content-Type: application/json',
        'AccessKeyId: 1XTAJKZSK02KMSZW47D2LSFQMMUV3LST',
        'AccessKeySecret: VS7EGQTB2CGWZXREL3QT3V72ZSRPYSXB'
    );
    //请求参数
    $json_data = '{
		"datainfo": [
			{
				"require1": "require1_value",
				"require2": "require2_value",
				"test3": "test_value"
			}
		]
	}';
    // 初始化cURL会话
    $ch = curl_init();
    // 设置cURL选项
    // 设置了请求的目标URL
    curl_setopt($ch, CURLOPT_URL, $url);
    // 发出一个POST请求
    curl_setopt($ch, CURLOPT_POST, true);
    // 设置HTTP请求头信息
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    // curl_exec()函数会将获取到的数据以字符串形式返回,而非直接输出到浏览器或标准输出。
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // 设置POST请求的主体数据。这里$json_data是一个JSON格式的字符串,它会被作为POST请求的数据部分发送给服务器。
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
    // 在进行HTTPS连接时是否验证服务器的SSL证书,设置为false意味着cURL在连接时将跳过SSL证书验证过程
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    // 执行cURL请求
    $response = curl_exec($ch);

    // 检查cURL执行是否成功
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    } else {
        // 处理响应数据
        $result = json_decode($response, true);
        // 根据API返回的数据进行后续操作...
        echo json_encode($result); // 使用print_r()函数打印返回的数据以便于调试和查看
    }

    // 关闭cURL会话
    curl_close($ch);
}

?>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8'); ?>" method="POST" enctype="multipart/form-data">
        <div class="centre">
            <input type="submit" name="Save" value="提交">
        </div>
    </form>
</body>

</html>

B-系统:被请求页面(test.php)

<?php
//连接数据库
require_once 'get_db_conn.php';
$conn = db_connect();
// 在HTTP响应头中设置内容类型(Content-Type)为 application/json。告知客户端服务器即将发送的数据格式是JSON
header('Content-Type: application/json');
// 检查并验证AccessKeyId和AccessKeySecret(假设已实现验证函数)
// 这里仅为示例,实际应根据您的密钥管理系统进行验证
$access_key_id = isset($_SERVER['HTTP_ACCESSKEYID']) ? $_SERVER['HTTP_ACCESSKEYID'] : '';
$access_key_secret_provided = isset($_SERVER['HTTP_ACCESSKEYSECRET']) ? $_SERVER['HTTP_ACCESSKEYSECRET'] : '';
//调用方法validate_access_keys判断密钥是否正确
if (!validate_access_keys($access_key_id, $access_key_secret_provided)) {
    //设置HTTP响应状态码为401,该状态码表示用户未经过授权,无法访问请求的资源。
    http_response_code(401);
    //返回错误信息给客户端
    echo json_encode(['error' => 'Unauthorized']);
    // 结束当前脚本的执行,不再执行后续的任何代码。
    exit;
}

// 检查请求方法和Content-Type
// 超全局变量,用于获取当前HTTP请求的方法
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
    // 客户端请求使用的方法(如GET、POST、PUT等)在服务器上针对指定资源不允许使用
    http_response_code(405);
    //返回错误信息给客户端
    echo json_encode(['error' => 'Method Not Allowed']);
    // 结束当前脚本的执行,不再执行后续的任何代码。
    exit;
}

// 预定义的服务器变量,它包含了客户端在HTTP请求头中发送过来的Content-Type值。这个值描述了请求主体(POST数据或PUT数据等)的内容类型
$content_type = isset($_SERVER['CONTENT_TYPE']) ? $_SERVER['CONTENT_TYPE'] : '';

// 用stripos函数查找 $content_type 字符串中是否以 'application/json' 开头。stripos 函数与 strpos 类似,但它是不区分大小写的查找。
if (stripos($content_type, 'application/json') !== 0) {
    // 表示服务器无法处理请求实体的媒体类型。
    http_response_code(415);
    //返回错误信息给客户端
    echo json_encode(['error' => 'Unsupported Media Type']);
    // 结束当前脚本的执行,不再执行后续的任何代码。
    exit;
}

// 获取并解析请求体中的JSON数据
// 从特殊的PHP输入流 'php://input' 中读取数据。这个输入流提供了对HTTP请求正文(请求体)的访问,特别适用于POST请求中传输的非表单数据,例如JSON或XML格式的数据
$input_json = file_get_contents('php://input');
// json_decode 函数,该函数用于将JSON格式的字符串 $input_json 解析成PHP变量。这里的第二个参数设为 true,表示将JSON对象解码为PHP关联数组,而不是默认的StdClass对象
$input_data = json_decode($input_json, true);

// 检查请求体中是否有必需的参数(现在考虑嵌套结构)
if (!isset($input_data['datainfo'][0]['require1'], $input_data['datainfo'][0]['require2'])) {
    // 如果没有找到所需的参数,则返回错误
    http_response_code(400);
    echo json_encode(['error' => 'Invalid Request Body']);
    exit;
}

// 使用请求参数执行业务逻辑
$require1 = $input_data['datainfo'][0]['require1'];
$require2 = $input_data['datainfo'][0]['require2'];
// 注意:这里似乎没有'test3'在根级别的数据项,所以如果'test3'也在'data'数组内,则应该这么写:
$test3 = $input_data['datainfo'][0]['test3'];

//调用方法查询数据
$data = fun_select($require1, $require2, $test3, $conn);


// 返回成功响应
http_response_code(200);
echo json_encode(['data' => $data,'msg' => 'success','require1'=>$require1]);

/**
 * 示例性验证AccessKeyId和AccessKeySecret的方法,实际项目中应实现自己的验证逻辑
 */
function validate_access_keys($key_id, $key_secret) {
    // 实现验证逻辑,如果验证通过则返回true,否则返回false
    //这里给出默认值
    if($key_id == '1XTAJKZSK02KMSZW47D2LSFQMMUV3LST' && $key_secret == 'VS7EGQTB2CGWZXREL3QT3V72ZSRPYSXB'){
        return true;
    }
    return false; // 默认返回false,仅做占位
}
//执行查询的方法
function fun_select($require1, $require2, $test3, $conn) {
    $sql_select = "SELECT * FROM accountgroups";
    $result_select = mysqli_query($conn, $sql_select);
    // 检查查询是否成功
    if ($result_select) {
        // 将查询结果转换为数组
        $data = [];
        while ($row = mysqli_fetch_assoc($result_select)) {
            $data[] = $row;
        }
        // 返回查询结果
        return $data;
    } else {
        // 查询失败时返回错误信息或者空数组
        echo "SQL查询执行失败: " . mysqli_error($conn);
        return [];
    }
}
?>

文章来源地址https://www.toymoban.com/news/detail-857041.html

到了这里,关于PHP:接口请求与被请求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用SSE技术调用OPENAI接口并实现流式输出,用PHP语言实现

    作为AI语言模型服务提供商,OpenAI 提供了一系列的 API 接口,其中大部分需要通过 HTTP 请求访问。对于大量数据的请求,传统的同步请求会导致网络响应变慢,无法满足实时数据处理和分析的需求。因此,为了优化这些接口的调用效率,我们可以利用 SSE(Server Sent Events) 技术来

    2024年02月11日
    浏览(45)
  • 短视频矩阵系统源码开发搭建技术解析-PHP语言

    一、系统架构 整个短视频矩阵系统大概分为以下几个模块: 1.多平台账号管理 支持抖音、快手、小红书、西瓜、头条视频号等多平台账号管理。 2.视频管理模块 支持视频批量上传、批量剪辑、文字转语音,特效等功能配置 3.推荐算法模块 推荐算法模块主要用来推荐用户感兴

    2024年02月07日
    浏览(64)
  • openAI 通过php方式 发送请求,流数据形式传输,php 实现chatGPT功能

    此处使用的框架是 symfony ,可自行根据自己框架开发,大同小异,框架无所谓,主要是功能! 先上代码 :

    2024年01月19日
    浏览(51)
  • php如何处理高并发请求

    PHP 处理高并发请求的方法:     使用异步框架:通过使用异步处理方式,可以有效地降低 PHP 处理请求的响应时间,避免因为 IO 操作而导致的等待阻塞。常用的异步框架有ReactPHP和Swoole等。     使用缓存:使用缓存可以减少每个请求都需要访问数据库或文件系统的次数,有

    2024年02月09日
    浏览(43)
  • PHP从入门到精通—PHP开发入门-PHP概述、PHP开发环境搭建、PHP开发环境搭建、第一个PHP程序、PHP开发流程

    每开始学习一门语言,都要了解这门语言和进行开发环境的搭建。同样,学生开始PHP学习之前,首先要了解这门语言的历史、语言优势等内容以及了解开发环境的搭建。 PHP概述 Ø 认识PHP PHP最初是由Rasmus Lerdorf于1994年为了维护个人网页而编写的一个简单程序。这个程序用来显

    2024年02月14日
    浏览(60)
  • php 常用的接口和函数

    — interface to provide accessing to objects as arrays 提供以数组形式访问对象的接口。 interface synopsis 接口需要实现下面几个方法 basic usage 基础用法 实现访问数组的方式访问接口 the above example will output something similar to : 输出结果 php官网ArrayAccess

    2024年02月05日
    浏览(55)
  • 如何在PHP中对接openAI接口,PHP创建AI会话思路以及代码讲解

    https://platform.openai.com/account/api-keys 在这个地址进行注册,但是需要翻墙,可自己查找国内的试用地址。就不多赘述… php端代码: 思路:前端通过一个图标入口,点击后 发送请求,创建一个会话(也就是聊天室),并且把创建的这个会话 入库。并且后端返回一个入库生成的

    2024年01月18日
    浏览(47)
  • php第三方阿里云接口

    阿里云 OpenAPI 开发者门户

    2024年02月15日
    浏览(36)
  • PHP的curl有三种Post请求数据的方式

    今天要讲的HTTP请求头的Content-Type字段,就是在curl发送post请求的时候需要指定以何种方式来请求数据,常用的有3类: 1、form-data 。就是 multipart/form-data 使用表单的方式来发送数据 是curl采用的默认发送方式。请求数组类型的格式。 Content-Type: multipart/form-data 2、x-www-form-urlenco

    2024年02月11日
    浏览(71)
  • PHP接口自动化测试框架实现

    我们来看一个简单的PHP实现的超简单的接口。 说明: 首先,它是一个POST接口。它需要两个参数:raid 和 mid。 然后,判断raid 和 mid 是否为空,为空返回:参数错误。 最后,调用 enlist_model 模型,通过  get_enlist_by_raid_mid 方法查询是否为空,如果不为空返回:你已经报过名了。

    2024年02月14日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包