CURL - 获取 HTTP 代码 if/else 进行测试


CURL - Getting HTTP code if/else to test

我想使用 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。希望这有帮助。