我想使用 curl 和 php 在 API 上进行 404 测试
虽然对令牌生成终结点 (/api/Utilities/StashData) 的有效请求将收到包含用于 Leap 的令牌的 HTTP 200 响应,但无效请求将收到 HTTP 400 响应(错误请求)。如果您的系统收到来自 API 的 HTTP 400 响应,则不得尝试继续 Leap。此响应的内容将包含一个描述验证错误的 JSON 序列化对象,如以下示例所示:
[
{
"Key": "CapeConsumers.TrackerNumber",
"Errors": [
{
"ErrorCode": "CC002",
"Description": "The value is required."
}
]
}
]
如您所见,响应包含一个对象数组,其中每个对象都有一个 Key 属性,该属性引用提交给服务的密钥,以及一个描述值被拒绝原因的 Errors 属性。ErrorCode 值是预定义的,保证永远不会更改,描述对于某些错误是动态的,主要是为了帮助调试
代码
CC001
无效值。
该值不符合为 定义的一个或多个验证规则 关键。
CC002
该值是必需的。
请求中省略了所需的值。发送空值或 所需值的空白字符串也会导致此错误 (除非通过支持 文档)。
CC003
该值的类型不正确。预期{0},找到{1}。
系统期望值属于一种类型,但属于另一种类型 已提交。(例如,发送了一个数字而不是一个字符串)
CC004
源对指定的广告系列无效。
活动与特定的整合方相关联。如果 集成方使用未分配给它的跟踪器编号, 将返回此错误。
CC005
该广告系列当前未处于活动状态。
跟踪链接编号引用的广告系列尚未开始或 已经走到了尽头。
这是我尝试过的代码。
$endpointUser = "myuser";
//
$endpointPassword = "mypass";
//
$url = "https://webservices_test.capeconsumers.co.za/api/Utilities/StashData";
$iframeUrl = "https://onlineapplicationtest.capeconsumers.co.za/Bridge/CapeConsumersSACommercial?token=";
$fields = array(
"User.IdentityNumber"=> $_GET['security_phrase'],
"CapeConsumers.TrackerNumber"=> "6E273247DB4840G3",
"Call.AgentReference"=> $_GET['user'] ,
"Call.RecordingReference"=> $_GET['security_phrase']
);
$process = curl_init($url);
curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($process, CURLOPT_HEADER, 0);
curl_setopt($process, CURLOPT_USERPWD, $endpointUser . ":" . $endpointPassword);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
curl_setopt($process, CURLOPT_POST, 1);
curl_setopt($process, CURLOPT_POSTFIELDS, json_encode($fields));
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
$token = curl_exec($process);
curl_close($process);
$token = str_replace('"','',$token);
$httpCode = curl_getinfo($process, CURLINFO_HTTP_CODE);
if($httpCode == 400) {
echo "there was an error"; exit;
}
?>
<iframe src="<?php echo $iframeUrl . $token; ?>" width="100%" height="800"></iframe>
我的问题是,如果我故意给它一个错误的响应,它仍然会生成 iframe,而不是在 if 语句处退出 400 错误。
我不确定我的逻辑,因为这是我第一次尝试卷曲
您收到响应代码为时已晚。
curl_close手册说:
关闭 cURL 会话并释放所有资源。cURL 句柄也将被删除。
订单必须是:
$httpCode = curl_getinfo($process, CURLINFO_HTTP_CODE);
curl_close($process);
否则,不再有 CURL 句柄,因此无法检索响应代码。
API 不会返回 404,当且仅当请求的 url 不存在或正在运行时,才会抛出它。要故意生成 404,请修改 url 的主机部分,使其引用错误的位置,因此应生成 404。希望这有帮助。