cUrl可以仿照GET,POST这类常见的HTTP要求,相信你该当也有打仗利用过。我这边由于创造域名是在Godaddy上注册的,而Godaddy又有供应API接口,这样仿照就更方便了。只是我创造它有些接口是指定要利用PUTA,PATCH这类HTTP要求,那cUrl能仿照这类要求吗?答案是肯定的。
curl_setopt($ch,CURLOPT_CUSTOMREQUEST, 'PUT');
设置cUrl的这个选项就可以指定仿照PUT或PATCH要求。那如何发送数据?实在是和仿照POST要求一样。
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //设置要求体,提交数据包
但是,仅仅把稳到这两个参数会让你陷入灾害的,我就由于这个摧残浪费蹂躏了几个小时,乃至末了要放弃才找到办理方案。由于做事端常日会提示没收到数据,或者收到的数据格式不对,实在也是没收到数据。除了cUrl的上面两个参数,一定要设置要求的header参数Content-Length的长度值,一定要设置要求的header参数Content-Length的长度值,一定要设置要求的header参数Content-Length的长度值。主要的事情说三遍,由于google的时候创造好多人碰到这个问题。
$header[]= 'Content-Length: ' . strlen($fields);
发送数据给API接口或其它做事端脚本,可以指天命据的格式,常日有两种,json字符串或url编码的字符串,这里你要在header里设置Content-Type的值为application/json或application/x-www-form-urlencoded,如
$header[]='Content-Type: application/json',
$header[]='Content-Type: application/x-www-form-urlencoded',
下面是完全的代码示例:
$domain='abcdomain.com';
$url = 'https://api.godaddy.com/v1/domains/' . $domain . '/records/A/abcde/';
$k='dKNtgjZoA3jV_QKArw1cC5pwxgagQnMPPHn';
$s='QKAv7vJ64YjRs7CiEHVRFi';
$header = array(
'Authorization: sso-key ' . $k . ':' . $s,
'Content-Type: application/json',
);
$fields = array( \公众data\"大众 => \"大众8.8.8.8\"大众, \"大众ttl\公众 => 600);
$fields = json_encode($fields);
//$fields = http_build_query($fields);
$header[]= 'Content-Length: ' . strlen($fields);
$res = request($url, $header, 'PUT');
function request($url, $header=array(), $method='GET',$fields=array()) {
$ch =curl_init();
if ($method == 'POST') {
curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
} elseif($method == 'PATCH') {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
} elseif($method == 'PUT') {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
// curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
// curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_HEADER, false);
$content = curl_exec($ch);
curl_close($ch);
return $content;
}
如有缺点,欢迎示正,本文原创,如须要转载,请注明来路,感激!