php CURL的 几种方式

自己 做个记录,你们看不懂拉倒, 不重要

1.请求 需要签名的接口很正常的请求,没有特殊设置

 

/**
 * 发送http post 请求,发送到api接口,已经写好了apikey
 *
 * @param string $type  类型,array、json类型
 * @param $data 提交参数,类型需要和 type 一致
 * @param $url  提交地址
 * @return mixed|string
 */
function _sendPostRequest($url, $content=null,$headers = null)
{
    $content = is_null($content)?array():$content;
    $ch = curl_init();

    if (substr($url, 0, 5)=='https') {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    // 用户加密信息
    if (!empty($headers)){
        $head_key = array('Authorization:'.$headers);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $head_key);


    }


    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($content));

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);


    $tmpInfo = curl_exec($ch);

    if (curl_errno($ch)) {
        return curl_error($ch);
    }
    curl_close($ch);
    return $tmpInfo;
}

2.

$jsonData = json_encode($data);

// 2. 请求服务器处理
$url = "地址";
list ($returnCode, $returnContent) = doPost($url, $jsonData);

 

/**
 * 该方法可以公用 //pingan
 */
function doPost($url, $jsonData)
{
    $cid = ; // 需要换成您自己的 企业id
    $appId = ""; // 需要换成您自己的 appId
    $appSecret = ""; // 需要换成您自己的 appSecret
    return http_post_json_crm($url, $jsonData, $cid, $appId, $appSecret);
}
/**
 * post 业务请求
 * 该方法可以公用
 * @param string $url
 * @param string $jsonData
 * @param int $cid
 * @param string $appId
 * @param string $appSecret
 */
function http_post_json_crm($url, $jsonData, $cid, $appId, $appSecret)
{
    // 1. 获取当前时间戳
    $timeStamp = time() * 1000;
    // 2. 获取签名
    $sign = getSign($timeStamp, $appId, $appSecret);
    // 3. 封装请求头
    $head = array(
        'Content-Type: application/json; charset=utf-8',
        'X-Ec-Cid: ' . $cid,
        'X-Ec-Sign: ' . $sign,
        'X-Ec-TimeStamp: ' . $timeStamp,
        'Content-Length: ' . strlen($jsonData)
    );

    // 3. 传入http 参数
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    // https 支持 - 对认证证书来源的检查
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    // 请求数据放这里
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
    // head
    curl_setopt($ch, CURLOPT_HTTPHEADER, $head);

    // 请求服务器
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    // 组织,返回结果和响应码
    return array(
        $httpCode,
        $response
    );
}

 

3.。。。

/**
 * curl post数据
 * @param $url
 * @param $post_data
 * @return mixed
 */
public function _postCurl($url, $content=null,$headers = null){
    $content = is_null($content)?array():$content;
    $ch = curl_init();

    if (substr($url, 0, 5)=='https') {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    // 用户加密信息
    if (!empty($headers)){
        $head_key =array(
            "Accept: application/json",
            "Content-Type: application/x-www-form-urlencoded;charset=UTF-8",
        );
        curl_setopt($ch, CURLOPT_HTTPHEADER, $head_key);


    }


    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
    curl_setopt ($ch, CURLOPT_ENCODING ,'gzip');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($content));

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);


    $tmpInfo = curl_exec($ch);

    if (curl_errno($ch)) {
        return curl_error($ch);
    }
    curl_close($ch);
    return $tmpInfo;
}

 

4.。header需要设置

$headers = 'Token token='.$user_token.', device=open_api, version_code=9.9.9';
$res = self::_sendPostRequest('https://lxcrm.weiwenjia.com/api/v2/customers',$list,$headers);
/**
 * 发送http post 请求,发送到api接口,已经写好了apikey
 *
 * @param string $type  类型,array、json类型
 * @param $data 提交参数,类型需要和 type 一致
 * @param $url  提交地址
 * @return mixed|string
 */
function _sendPostRequest($url, $content=null,$headers = null)
{
    $content = is_null($content)?array():$content;
    $ch = curl_init();

    if (substr($url, 0, 5)=='https') {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    // 用户加密信息
    if (!empty($headers)){
        $head_key = array('Authorization:'.$headers);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $head_key);


    }


    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($content));

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);


    $tmpInfo = curl_exec($ch);

    if (curl_errno($ch)) {
        return curl_error($ch);
    }
    curl_close($ch);
    return $tmpInfo;
}

 

乱糟糟的各种 格式 ,

PHP并发CURL是指在PHP中同时发送多个HTTP请求,以提高程序的执行效率和响应速度。通常情况下,PHP使用单线程处理请求,即每次只能处理一个请求,而并发CURL可以在同一时间内处理多个请求。 在PHP中实现并发CURL可以使用多种方法,其中比较常用的有以下两种: 1. 使用curl_multi_*函数:PHP提供了一组用于处理并发CURL请求的函数,如curl_multi_init、curl_multi_add_handle、curl_multi_exec等。通过这些函数,可以创建一个CURL多句柄,将多个请求添加到句柄中,并同时执行这些请求。使用这种方法需要注意处理返回结果和错误信息。 2. 使用第三方库或框架:除了原生的curl_multi_*函数,还可以使用一些第三方库或框架来简化并发CURL的实现。例如,Guzzle是一个流行的PHP HTTP客户端库,它提供了简洁的API来处理并发请求,并且支持更多高级功能,如重试、超时控制等。 无论使用哪种方法,实现并发CURL都需要注意以下几点: - 设置合适的并发请求数量:过多的并发请求可能会导致服务器负载过高,而过少的并发请求可能无法充分利用服务器资源。需要根据具体情况设置合适的并发请求数量。 - 处理返回结果:并发CURL请求的返回结果通常是异步的,需要适当处理返回结果,如解析响应数据、处理错误信息等。 - 错误处理:在并发CURL请求中,可能会出现一些错误,如连接超时、请求失败等。需要适当处理这些错误,以保证程序的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值