繁体   English   中英

php-CURL-获取HTTP代码(如果要测试)

[英]php - 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值是预定义的,并且保证从不更改。Description对于某些错误是动态的,并且主要用于帮助调试

密码

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。 要有意生成404,请修改url的hostsection,以使其指向错误的位置,并因此应返回404。希望这会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM