我尝试在PHP中执行使用JSON数组的curl语句。我将在下面发布我的代码,并对我尝试做什么做一点解释
function doPost($url, $user, $password, $params) {
$authentication = 'Authorization: Basic '.base64_encode("$user:$password");
$http = curl_init($url);
curl_setopt($http, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($http, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($http, CURLOPT_RETURNTRANSFER, true);
curl_setopt($http, CURLOPT_URL, $url);
curl_setopt($http, CURLOPT_POST, true);
curl_setopt($http, CURLOPT_POSTFIELDS, $params);
curl_setopt($http, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json', $authentication));
return curl_exec($http);
}
$link = "http://link.it/i.htm?id=55&key=23987gf2389fg";
$phone = '5551231234';
$phone = '1' . $phone;
//Write message
$msg = "Click here " . $link;
$params = '[{"phoneNumber":"'.$phone.'","message":"'.$msg.'"}]';
//Send message
$return = doPost('https://api.link.com','username','password',$params);
echo $return;
Params最终成为
$params = '[{"phoneNumber":"15551231234","message":"Click here http://link.it/i.htm?id=55&key=23987gf2389fg"}]';
一切看起来都不错。如果$ msg变量中没有链接,那么由params创建的JSON数组实际上可以正常工作。我能够执行成功的CURL调用。它失败的唯一时间是我添加一个链接到我的$ msg变量。
我已经联系API的支持团队,他们告诉我一切都应该在他们的最终工作。
此时我猜测链接需要以某种方式进行转义才能写入JSON数组。我已经尝试用反斜杠转义冒号和正斜杠,但它不能解决问题。有没有人能说明如何通过网址?
提前谢谢!!
答案 0 :(得分:5)
不要手动构建您的JSON。构造和数组或对象然后在其上调用json_encode()。
$params = array();
$object = array("phone"=>$phone, "message"=>$linkMsg);
$params[] = (object) $object;
$param_json_string = json_encode($params);
然后当用curl通过POST提交JSON时,你需要在标题中指定字符串的长度。
curl_setopt($http, CURLOPT_HTTPHEADER,
array( 'Content-Type: application/json',
'Content-Length: '. strlen($param_json_string)));
当然,这是除了您正在设置的身份验证之外的其他标题(正如我在您的doPost()
方法中所做的那样)。