我正在使用CURL发送请求。响应dataType为json
。如何解析这些数据并将其插入数据库?
<?php
$url = 'http://sms2.cdyne.com/sms.svc/SimpleSMSsendWithPostback? PhoneNumber=18887477474&Message=test&LicenseKey=LICENSEKEY';
$cURL = curl_init();
curl_setopt($cURL, CURLOPT_URL, $url);
curl_setopt($cURL, CURLOPT_HTTPGET, true);
curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Accept: application/json'
));
$result = curl_exec($cURL);
curl_close($cURL);
print_r($result);
?>
JSON输出:
{
"Cancelled": false,
"MessageID": "402f481b-c420-481f-b129-7b2d8ce7cf0a",
"Queued": false,
"SMSError": 2,
"SMSIncomingMessages": null,
"Sent": false,
"SentDateTime": "/Date(-62135578800000-0500)/"
}
答案 0 :(得分:73)
如果您的$result
变量是字符串json,则必须使用json_decode
函数将其解析为对象或数组:< / p>
$result = '{"Cancelled":false,"MessageID":"402f481b-c420-481f-b129-7b2d8ce7cf0a","Queued":false,"SMSError":2,"SMSIncomingMessages":null,"Sent":false,"SentDateTime":"\/Date(-62135578800000-0500)\/"}';
$json = json_decode($result, true);
print_r($json);
Array
(
[Cancelled] =>
[MessageID] => 402f481b-c420-481f-b129-7b2d8ce7cf0a
[Queued] =>
[SMSError] => 2
[SMSIncomingMessages] =>
[Sent] =>
[SentDateTime] => /Date(-62135578800000-0500)/
)
现在,您可以将$json
变量用作数组:
echo $json['MessageID'];
echo $json['SMSError'];
// other stuff
参考文献:
答案 1 :(得分:4)
尝试:
$result = curl_exec($cURL);
$result = json_decode($result,true);
现在,您可以从MessageID
访问$result['MessageID']
。
对于数据库,它只是使用如下查询:
INSERT INTO `tableName`(`Cancelled`,`Queued`,`SMSError`,`SMSIncommingMessage`,`Sent`,`SentDateTime`) VALUES('?','?','?','?','?');
制备
答案 2 :(得分:0)
示例代码的主要问题在于,用于存储$result
的输出的curl_exec()
变量不包含HTTP响应的主体-它包含值true
。如果您尝试print_r()
,它只会说“ 1”。
返回值
成功返回
TRUE
,失败返回FALSE
。但是,如果设置了CURLOPT_RETURNTRANSFER
选项,则成功时将返回结果,失败时将返回FALSE
。
因此,如果要在$result
变量中获取HTTP响应正文,则必须先运行
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
之后,您可以致电json_recode()
上的$result
,如其他答案所指出的。
总的来说,PHP的curl库非常有用,并且具有许多处理HTTP协议(及其他)细节的功能,但是如果您想要的只是GET
一些资源,甚至是{ {1}}到某个URL,然后阅读响应-然后file_get_contents()
就成为了您所需要的:使用起来更简单,并且不用担心令人惊讶的行为。