您的位置 首页 php

PHP-cUrl模拟HTTP的PUT,PATCH请求

碰到了一个解析域名的场景,因为数量比较多,想使用cUrl模拟HTTP请求来解放双手。事实证明花点时间编码的确可以达到事半功倍的效果。

cUrl可以模拟GET,POST这类常见的HTTP请求,相信你应该也有接触使用过。我这边因为发现域名是在 Godaddy 上注册的,而Godaddy又有提供API接口,这样模拟就更方便了。只是我发现它有些接口是指定要使用PUTA,PAT ch 这类HTTP请求,那cUrl能模拟这类请求吗?答案是肯定的。

设置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 = ‘ . $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;

}

如有错误,欢迎指正,本文原创,如需要转载,请注明来路,谢谢!

文章来源:智云一二三科技

文章标题:PHP-cUrl模拟HTTP的PUT,PATCH请求

文章地址:https://www.zhihuclub.com/76872.shtml

关于作者: 智云科技

热门文章

网站地图