网站首页 > 基础教程 正文
碰到了一个解析域名的场景,因为数量比较多,想使用cUrl模拟HTTP请求来解放双手。事实证明花点时间编码的确可以达到事半功倍的效果。
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;
}
如有错误,欢迎指正,本文原创,如需要转载,请注明来路,谢谢!
猜你喜欢
- 2024-11-03 10个 ThinkPHP 开发常用代码片段 thinkphp codeigniter
- 2024-11-03 DEDECMS织梦系统接入熊掌号推送api,完整详细教程
- 2024-11-03 漏洞系列一一看我一招征服漏洞 SSRF
- 2024-11-03 少侠说好的CURL上传文件说来就来 北极狐上海专柜
- 2024-11-03 PHP使用curl抓取新闻数据 php curl获取header
- 2024-11-03 如何使用钉钉机器人定时推送 钉钉机器人定时发送消息
- 2024-11-03 curl模拟http请求范例详析 curl访问https
- 2024-11-03 PHP Curl https跳过ssl证书认证报错记录及解决
- 2024-11-03 PHP模拟登录时跳过HTTPS验证的方法
- 2024-11-03 curl_setopt(): CURLOPT_SSL_VERIFYHOST no longer accepts the value
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- 单例 (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)