zoukankan      html  css  js  c++  java
  • curl Array to string conversion 错误

    0x00 故障

    由于GuzzleHttp在iis上使用错误,于是开始替换其为Unirest,没想到发送了一个curl Array to string conversion 错误

    0x01 原因

    跟踪调用流程,发现是在curl_setopt时设置CURLOPT_POSTFIELDS后抛出的异常。
    查看php文档原因是

    CURLOPT_POSTFIELDS setting using an array. The array used to set the POST fields must only contain scalar values. Multidimentional arrays or objects lacking a __toString implementation will cause Curl to error.

    即CURLOPT_POSTFIELDS不支持多维数组或没有__toString方法的对象。

    0x02 解决

    阅读GuzzleHttp和Unirest原来是两者POST的时候参数格式不一致

    //GuzzleHttp
    [
        ["name" => $key1,
        "contents" => $val1],
        ["name" => $key2,
        "contents" => $val2],
        //....
    ]
    //Unirest
    [
    "key1"=>$val1,
    "key2"=>$val2,
    //...
    ]
    

    既然如此,写个转换参数格式的函数即可,如下

    function convertGuzzleParamToUnirest($param) {
        $res = [];
        foreach ($param as $item){
            if(is_array($item)){
                $res[$item['name']] = $item['contents'];
            }
        }
    
        return $res;
    }
    

    0x03 扩展

    Unirest获取Response直接用$response->body 即可,而且是已经json_decode后的,比GuzzleHttp的简洁许多。
    如果要获取原始返回内容,使用$response->raw_body。

  • 相关阅读:
    webApi2 结合uploadify 上传报错解决办法
    对特殊字符进行转移
    数据库事务MTDC出错解决办法
    查询数据所有的外键关系
    查询SQL阻塞语句
    Django介绍
    Docker简介
    Docker CE部署
    jQuery快速入门
    系统批量运维管理器paramiko详解
  • 原文地址:https://www.cnblogs.com/xdao/p/curl_string_conversion_error.html
Copyright © 2011-2022 走看看