如何从其他站点检索 json 数据并使用 cURL 对其进行解码?

Posted

技术标签:

【中文标题】如何从其他站点检索 json 数据并使用 cURL 对其进行解码?【英文标题】:How to retrieve json data from other site(s) and decoding it using cURL? 【发布时间】:2015-02-21 15:41:23 【问题描述】:

情况

我在尝试使用 cURL 从我的其他站点检索数据时卡住了

当我去http://localhost/api/distributors

我可以看到所有的 json。 :)

但是当我使用 CLI 并运行此命令时curl -i --user test:1234 http://localhost/api/distributors

我无法连接到它,或者根本看不到任何 json。

我不确定出了什么问题。 我确定我输入了正确的用户名和密码。

详情

这是我的路线。

Route::get('/api/distributors', array('before' => 'auth.basic', 'uses'=>'DistributorController@api_index'));

它叫DistributorController > api_index

这是我的api_index 函数

public function api_index()

$distributors = [];

foreach(Distributor::all() as $distributor)

    $user = $distributor->user()->first();

    $distributors[$distributor->id] = [

    'user' => $user->toArray(),
    'distributor' => $distributor->toArray(),
    'contacts' => $distributor->contacts()->get()->toArray(),
    'addresses' => $distributor->addresses()->get()->toArray()
    ];


$json_string = json_encode($distributors, JSON_PRETTY_PRINT);

return $json_string;

问题

我不确定应该将代码的解码部分放在哪里。 是否应该进入encoding的相同功能?

看起来像这样:

<h1>Decode</h1>

<?php

$ch = curl_init("http://localhost/api/distributors");
curl_setopt($ch, CURLOPT_USERPWD, "test:1234");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$body = curl_exec($ch);
curl_close($ch);

?>


<?php $distributor = json_decode($body, TRUE); ?>

<!-- Test -->
<li><?php echo $distributor['distributor']['company_name']; ?></li>

注意

我只是在尝试使用 cURL 连接时遇到问题。

【问题讨论】:

将调试回显与 LINE FILE 并查看,添加 laravel 标记 Route::get ?卷曲不是帖子吗?尝试 Route::any 好的。我现在就试试。 debug echo with LINE FILE,这是什么意思?同样Route::any 也不起作用,当我运行这个curl -i --user test:1234 http://localhost/api/distributors echo curl_error($ch) 有话说吗? 【参考方案1】:

要解决的主要问题:

- 将此添加到您的routes.php

Route::group(array('prefix' => 'api', 'before' => 'auth.basic|api'), function()
    Route::resource('url', 'UrlController');
);

- 在filters.php 中添加 2 个东西

    添加auth.basic

    // 基本认证

    Route::filter('auth.basic', function()
    
        return Auth::basic("username");
    );
    

    添加api过滤器

    // API 路由::filter('api', function()

    $user = Auth::user();
    
    if ($user)
        // Let them in
     
    else
        return Response::view('errors.404', array(), 404);
    
    

    );

- 创建新的controller 函数并将其扔在那里..

<?php

class UrlController extends \BaseController 

    // public function index()
    //  return Response::json(User::all());
    // 

    public function index()
    
        $distributors = [];

        foreach(Distributor::all() as $distributor)
        
            $user = $distributor->user()->first();

            $distributors[$distributor->id] = [

            'user' => $user->toArray(),
            'distributor' => $distributor->toArray(),
            'contacts' => $distributor->contacts()->get()->toArray(),
            'addresses' => $distributor->addresses()->get()->toArray()
            ];
        

        return Response::json($distributors);
    

【讨论】:

以上是关于如何从其他站点检索 json 数据并使用 cURL 对其进行解码?的主要内容,如果未能解决你的问题,请参考以下文章

如何允许其他站点从您的站点检索数据?

如何发送 JSON 并使用 cURL 检索它?

使用 PHP Curl 发布数据并检索响应?

如何使用 json 从 sql server ASP.net 中检索数据

如何使用来自 3rd 方站点的 URL 端点进行 JSON 响应

在命令行中使用 curl 通过 JSON 对象发布数据