laravel:http请求错误

时间:2016-11-21 10:51:13

标签: php laravel

我的想法是使用名为Notifications的模型向我的数据库中保存的所有网址发送https请求。

class guzzleController extends Controller
{
    public function guzzle() {
        $client = new Client();
        $notes=Notification::all();
        $response = $client->get($notes);
        $response=$response->getStatusCode();
        var_dump($response);
    }
}

由于某种原因,get方法需要string,它给了我一个错误:

  

functions.php第62行中的InvalidArgumentException:URI必须是字符串或UriInterface

我该如何解决这个问题?谁有更好的想法?
这实际上是我的通知类

namespace App;
use App\Status;
use App\Notification;

use Illuminate\Database\Eloquent\Model;

class Notification extends Model
{
    protected $fillable = ['id','website_url','email','slack_channel','check_frequency','alert_frequency','speed_frequency','active'];

    public function statuses(){
        return $this->belongsToMany('App\Status')->withPivot('values')->withTimestamps();
    }

2 个答案:

答案 0 :(得分:0)

您只是说您正在使用Client课程,但此处没有使用陈述的痕迹,因为您没有显示所需的所有代码我们想出来了。我们甚至不知道get方法参数是什么。我的猜测是,您从此声明中获取了Notification个类实体的数组:$notes=Notification::all();

首先,你应该迭代它们,然后在每一个上调用客户端。但是,您可能还需要为get方法提供一个字符串。无法说明,因为Notification类也没有代码。

修改

考虑到你提供的代码,我认为你应该试试这样的事情:

class guzzleController extends Controller
{
    public function guzzle() 
    {
        $client = new Client();
        $notes = Notification::all();

        foreach ($notes as $note) {
            $response = $client->get($note->website_url);
            $response = $response->getStatusCode();
            var_dump($response);
        }
    }
}

答案 1 :(得分:0)

正如错误消息所示,guzzle客户端的get()方法接受字符串或UriInterface实现。您从Notification模型(返回Illuminate\Support\Collection而不是URI数组)中获取数据并将其直接提供给客户端。您需要为客户准备数据。像这样:

use Notification;
use GuzzleHttp\Client;

class GuzzleController extends Controller
{
    public function guzzle() 
    {
        $client = new Client();
        $notes  = Notification::all();

        // To do this in a more Laravelish manner, see:
        // https://laravel.com/docs/5.3/collections#method-each
        foreach ($notes as $note) {
            // Assuming that each $note has a `website_url` property  
            // containing the URL you want to fetch.
            $response = $client->get($note->website_url);

            // Do whatever you want with the $response for this specific note
            var_dump($response);
        }
    }
}