php中使用curl来post一段json数据
2024-08-25 22:37:40
场景:在调用第三方接口时经常需要使用到curl进行数据交互,在初次使用时遇到一些小问题,记录下来随时查阅。
封装curl相关方法便于使用,方法如下:
/**
* @param $url
* @param string $error
* @param array|string $post
* @param int $timeout
* @param null $ref
* @param string $ua
* @param $contentType
* @return bool|mixed
*/
function xcurl($url, &$error = "", $post = array(), $timeout = 5, $ref = null, $ua = "Mozilla/5.0 (X11; Linux x86_64; rv:2.2a1pre) Gecko/20110324 Firefox/4.2a1pre", $contentType) {
$ch = curl_init(); if(!empty($ref)) {
curl_setopt($ch, CURLOPT_REFERER, $ref);
} curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); if (false !== stripos($url, "https://")) { # https处理,不校验相关证书
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
} if(!empty($ua)) {
curl_setopt($ch, CURLOPT_USERAGENT, $ua);
} if(count($post) > 0){
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
} if ('json' == $contentType) {
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: ' . strlen($post)));
} $output = curl_exec($ch);
if ($output === false) {
$error = curl_error($ch);
curl_close($ch);
return false;
} else {
curl_close($ch);
return $output;
}
}
调用如下:
<? $url = 'localhost/php/server.php';
$error = '';
$post = [
'hello' => 'world',
'lang' => 'php',
];
$post = json_encode($post); $result = xcurl($url,$error, $post, 5, null, 'Mozilla/5.0 (X11; Linux x86_64; rv:2.2a1pre) Gecko/20110324 Firefox/4.2a1pre', 'json'); var_dump($result);
本地服务接受参数时遇到了问题,无论$_POST还是$_REQUEST都无法获取curl客户端发送的json,所以改用file_get_contents来获取,代码:
print_r(file_get_contents('php://input'));
最终请求curl.php获取到结果为:
/code/php/curl.php:19:string
'{"hello":"world","lang":"php"}' (length=30)
最新文章
- Sublime text 3 快捷键的使用
- Javascript权威指南——第一章Javascript概述
- pycharm Working directory error
- 一份Java学习路线图
- About Webkit
- new date() 函数在浏览器中的兼容问题!!
- [TypeScript] Avoid any type
- poj_3468: A Simple Problem with Integers (树状数组区间更新)
- JavaScript入门(三)
- Java实用知识记录 —— 截止到Java8
- 第 10 章 容器监控 - 078 - Docker 最常用的监控方案
- struts1与struts2的区别。
- VMWare安装
- Java:ConcurrentLinkedQueue的实现原理分析
- The META for Mobile terminal
- pselect 函数
- 使用PHP+Sphinx建立高效的站内搜索引擎
- loj#2721. 「NOI2018」屠龙勇士
- Oracle开发者守则
- 打印系统所有的PID