2014-03-12 32 views
78

我想要的是從具有HTTP(例如jQuery的AJAX)請求的API獲取對象到外部api。我如何開始?我對Google先生進行了研究,但找不到任何幫助。從Laravel執行HTTP請求到外部API

我開始懷疑這是甚至可能的嗎? 在這篇文章中Laravel 4 make post request from controller to external url with data它看起來可以完成。但是沒有例子,也沒有任何來源可以找到一些文檔。

請幫我一下嗎?

+8

很久以後,創建了一個真正的小嘖嘖如​​何使用Guzzle。來自aisnoek他的回答。 HTTP://基連。nl/laravel-post-requests-with-guzzle/ – Chilion

+0

如果仍然感興趣,你也可以使用Curl來做這件事,我想你可以說curl是某種形式的PHP的jquery ajax。 – killstreet

回答

96

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", .... 
提供個
+1

另請參閱Jeremie Ges的回答,\t 看起來不錯,雖然它並不能真正回答我的問題,但實際上Laravel有點類似,我一定會考慮一下。謝謝! – Chilion

+0

@Chilion,Al Snoek WAS指導你使用官方的Laravel軟件包。它已預先安裝在laravel供應商組中。 – GoogleMac

31

你只是想調用一個外部URL並使用結果? PHP做這個開箱,如果我們談論的是一個簡單的GET請求的東西服務JSON:

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

如果你想要做一個POST請求,這是一個有點困難,但有實例負載如何用捲曲來做到這一點。

所以我想這個問題是;你想要什麼?

+0

我希望能夠使用REST API的各種功能。所以是的,我需要POST。我想(希望......)Laravel會有一些方法可以用Laravel的方式來完成,但是我會堅持使用PHP。謝謝。 – Chilion

1

您可以使用Httpful:

網站:http://phphttpclient.com/

Github上:基於類似的問題在這裏的答案https://github.com/nategood/httpful

+0

看起來不錯,雖然它實際上並沒有回答我的問題,但事實上Laravel有點類似,我一定會考慮一下。謝謝! – Chilion

+0

Laravel還沒有得到這個開箱即用,但Laravel運行在作曲家之下,所以你可以使用像Httpful這樣的庫來完成工作。順便說一句,你也可以使用http://requests.ryanmccue.info/ –

+0

Laravel是作曲家,所以任何包是公平的遊戲。 – kratos

1

您可以使用Laravel請求,並沒有外部包

$request = \Illuminate\Http\Request::create('http://your-api.com', 'POST', ['param1' => 'value1', 'param2' => 'value2']); 

請求的功能,因爲Laravel依靠的Symfony的請求包。

+13

Request類是一個容器,可以更容易地訪問請求的各種屬性。運行上述代碼會生成一個對象,但它不會對端點執行實際的HTTP請求。 –

11

如果你只需要觸發請求外部API,你可以使用Laravel Request類如下(假設你使用GET請求)

$request = Request::create('http://your-api.com', 'GET'); 

但是,如果你需要得到響應的內容,您可以使用Laracurl包如下:

$response = Laracurl::get('http://your-api.com'); 
55

我們可以利用包Laravel狂飲,它是一個PHP HTTP客戶端發送HTTP請求。

您可以通過作曲家

composer require guzzlehttp/guzzle:~6.0 

安裝狂飲也可以指定狂飲作爲您的項目現有composer.json的依賴

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

示例代碼中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"...' 
} 
+2

謝謝你的回答。另請參閱我的帖子下方的評論; \t \t \t 很久以後,創建了一個非常小的嘖嘖如何使用Guzzle。來自aisnoek他的回答。 chilion.nl/laravel-post-requests-with-guzzle - Chilion 8月19日12:09√ – Chilion