首页 文章

执行HTTP请求从Laravel到外部API

提问于
浏览
112

我想要的是从API获取一个带有HTTP(例如,jQuery的AJAX)请求的对象到外部api . 我该如何开始?我对谷歌先生进行了研究,但我找不到任何帮助 .

我开始怀疑这是否可能?在这篇文章Laravel 4 make post request from controller to external url with data看起来它可以做到 . 但是没有任何示例或任何来源可以找到一些文档 .

请帮帮我?

5 回答

  • 143

    基于类似问题的答案:https://stackoverflow.com/a/22695523/1412268

    看看Guzzle

    $client = new GuzzleHttp\Client();
    $res = $client->get('https://api.github.com/user', ['auth' =>  ['user', 'pass']]);
    echo $res->getStatusCode(); // 200
    echo $res->getBody(); // { "type": "User", ....
    
  • 0

    我们可以在Laravel中使用Guzzle包,它是一个发送HTTP请求的PHP HTTP客户端 .

    你可以通过作曲家安装Guzzle

    composer require guzzlehttp/guzzle:~6.0
    

    或者您可以将Guzzle指定为项目现有composer.json中的依赖项

    {
       "require": {
          "guzzlehttp/guzzle": "~6.0"
       }
    }
    

    使用Guzzle的laravel 5中的示例代码如下所示,

    use GuzzleHttp\Client;
    class yourController extends Controller {
    
        public function saveApiData()
        {
            $client = new Client();
            $res = $client->request('POST', 'https://url_to_the_api', [
                'form_params' => [
                    'client_id' => 'test_id',
                    'secret' => 'test_secret',
                ]
            ]);
            echo $res->getStatusCode();
            // 200
            echo $res->getHeader('content-type');
            // 'application/json; charset=utf8'
            echo $res->getBody();
            // {"type":"User"...'
    }
    
  • 1

    您只想调用外部URL并使用结果?如果我们正在讨论对服务JSON的东西的简单GET请求,那么PHP就是开箱即用的:

    $json = json_decode(file_get_contents('http://host.com/api/stuff/1'), true);
    

    如果你想做一个帖子请求,那就有点难了,但是有很多例子如何用curl做这个 .

    所以我想这个问题是;你究竟想要什么?

  • 40

    你可以使用Httpful:

    网站:http://phphttpclient.com/

    Github:https://github.com/nategood/httpful

  • 77

    Updated on March 21 2019

    使用 composer require guzzlehttp/guzzle:~6.3.3 添加 GuzzleHttp

    或者您可以将Guzzle指定为项目中的依赖项 composer.json

    {
       "require": {
          "guzzlehttp/guzzle": "~6.3.3"
       }
    }
    

    在您调用API的类的顶部包含以下行

    use GuzzleHttp\Client;
    

    添加以下代码以发出请求

    $client = new Client();
    
        $res = $client->request('POST', 'http://www.exmple.com/mydetails', [
            'form_params' => [
                'name' => 'george',
            ]
        ]);
    
        if ($res->getStatusCode() == 200) { // 200 OK
            $response_data = $res->getBody()->getContents();
        }
    

相关问题