目前使用与laravel安装程序一起使用的Laravel 5.5和Guzzle。
我正在尝试发出GET请求(其他HTTP请求也会发生错误),但似乎无法正常工作。
此代码不起作用:
public function callback(Request $request)
{
$code = $request->code;
$client = new Client(['exceptions' => false]);
try {
$response = $client->request('GET', 'http://localhost/api/tests');
// $response = $http->request('POST', Config::get('app.url') . '/oauth/token', [
// 'form_params' => [
// 'grant_type' => 'authorization_code',
// 'client_id' => Config::get('oauth_client.client_id'),
// 'client_secret' => Config::get('oauth_client.client_secret'),
// 'redirect_uri' => Config::get('oauth_client.redirect_uri'),
// 'code' => $code,
// ],
// ]);
// return json_decode((string) $response->getBody(), true);
} catch (\Exception $e) {
dd($e);
}
dd($response->getBody());
return;
}
但是下面的代码工作得非常好
public function callback(Request $request)
{
$code = $request->code;
$client = new Client(['exceptions' => false]);
try {
$response = $client->request('GET', 'https://www.google.co.id');
// $response = $http->request('POST', Config::get('app.url') . '/oauth/token', [
// 'form_params' => [
// 'grant_type' => 'authorization_code',
// 'client_id' => Config::get('oauth_client.client_id'),
// 'client_secret' => Config::get('oauth_client.client_secret'),
// 'redirect_uri' => Config::get('oauth_client.redirect_uri'),
// 'code' => $code,
// ],
// ]);
// return json_decode((string) $response->getBody(), true);
} catch (\Exception $e) {
dd($e);
}
dd($response->getBody());
return;
}
我不明白为什么我的Guzzle能够请求google.com但无法连接到我自己的localhost服务器(到所有端口)。
任何帮助都会非常感激。
谢谢,
答案 0 :(得分:2)
之所以不起作用,是因为Date = c("8/20/2019","8/20/2019","8/20/2019")
Name = c("ABC","CBC","XYLEM")
class = c("one","two","three")
M=c("1.5","NA","low,lower")
F = c("NA","top,topper","2")
out = data.frame(Date,Name,class,M,F)
使用PHP内置的Web服务器,而它是single threaded。因此,如果您运行您的应用程序,则在完成初始请求之前,它将无法再发出另一个请求(您的Guzzle请求)。这就是它挂起的原因(如here所述)。
(正如您所指出的)一种解决方案是使用多线程的真实Web服务器。
但是,如果您仍然想使用php artisan serve
而不是像Nginx这样的Web服务器,那么有一个简单的解决方案(我已经在another issue中发布了):
您可以使用另一个端口运行另一个Web服务器实例,并配置您的应用程序以在连接到API时使用此php artisan serve
:
base_uri
php artisan serve \\ defaults to port 8000
\\ in another console
php artisan serve --port=8001
答案 1 :(得分:0)
为我的开发服务器使用Apache2和Virtual Host解决了这个问题,这种方法比对Guzzle参数进行任何更改更加真实。
所以我的结论是更好地使用真正的网络服务器(Nginx,Apache)而不是工匠服务。
答案 2 :(得分:-1)
将'CURLOPT_SSL_VERIFYPEER'
选项设为false
public function callback(Request $request)
{
$code = $request->code;
$client = new Client(['exceptions' => false, 'CURLOPT_SSL_VERIFYPEER' => false]);
try {
$response = $client->request('GET', 'http://localhost/api/tests');
// $response = $http->request('POST', Config::get('app.url') . '/oauth/token', [
// 'form_params' => [
// 'grant_type' => 'authorization_code',
// 'client_id' => Config::get('oauth_client.client_id'),
// 'client_secret' => Config::get('oauth_client.client_secret'),
// 'redirect_uri' => Config::get('oauth_client.redirect_uri'),
// 'code' => $code,
// ],
// ]);
// return json_decode((string) $response->getBody(), true);
} catch (\Exception $e) {
dd($e);
}
dd($response->getBody());
return;
}