php curl 实现get方法请求和多维数据传送

php之curl 2020-01-19 阅读 56 评论 0

使用 php 的 curl 类库实现 get 方法,要注意请求的 url 有长度的限制,浏览器(ie、google chrome、firefox等)、服务器(nginx、iis、apache等)的限制各不相同,url 的参数过长时可能出现414状态吗:HTTP Error 414. The request URL is too long。提交比较大量的数据,可以考虑使用 post 方法。

get 方法的实现

function get($url, $headers)
{
    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true, // 如果成功只将结果返回,不自动输出任何内容
        CURLOPT_TIMEOUT => 0,   // 设置curl允许执行的最长秒数
    ));
    // 设置请求头
    if (!empty($headers)) {
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    }
    $response = curl_exec($curl);
    $errno = curl_errno($curl);
    if ($errno) {
        return false;
    }
    curl_close($curl);
    return $response;
}

传递多维数组

构建 url 的请求参数,使用 http_build_query 或者 urlencode 对键值对编码,然后拼接到url上。

$arr = [
    "name" => "用户名",
    "password" => "密码",
    "arr[0][one]" => 1,
    "arr[0][two]" => 2,
    "arr[1][three]" => 3,
    "arr[1][four]" => 4
];
$params = http_build_query($arr);
$url = "http://localhost/response.php?" . $params;
$headers = ["User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"];
get($url, $headers);

response.php 打印 print_r($_GET);

Array
(
    [name] => 用户名
    [password] => 密码
    [arr] => Array
        (
            [0] => Array
                (
                    [one] => 1
                    [two] => 2
                )

            [1] => Array
                (
                    [three] => 3
                    [four] => 4
                )

        )

)

post 的实现可以参考

php curl实现application-x-www-form-urlencoded提交

php curl实现 multipart/form-data 的 post 提交

PHP 使用 curl 提交 json、xml格式raw数据

最后更新 2020-07-24
MIP.watch('startSearch', function (newVal, oldVal) { if(newVal) { var keyword = MIP.getData('keyword'); console.log(keyword); // 替换当前历史记录,新增 MIP.viewer.open('/s/' + keyword, {replace: true}); setTimeout(function () { MIP.setData({startSearch: false}) }, 1000); } }); MIP.watch('goHome', function (newVal, oldVal) { MIP.viewer.open('/', {replace: false}); });