每当我尝试请求localhost时,Laravel服务器都会挂起:8000 /任何使用guzzle

时间:2017-07-03 07:04:11

标签: php laravel localhost guzzle

如果我向http://localhost:8000http://127.0.0.1:8000发出任何请求,则会挂起暂挂状态。 (正好在这里https://github.com/guzzle/guzzle/issues/1857

我被告知这与guzzle无关,我最好在这里问一下。

我在跟随laravel.com/docs/5.4/passport

时偶然发现了这个问题

这是挂起的代码:

$response = $http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'authorization_code',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'redirect_uri' => 'http://example.com/callback',
        'code' => $request->code,
    ],
]);

我尝试向工作API路径发出GET和POST请求(使用邮递员测试),并且在使用guzzle调用相同路由时仍然挂起。

那么有没有办法在使用php artisan serve时向我自己的API发出请求?

4 个答案:

答案 0 :(得分:4)

try this.
namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Route;
use App\User;

class UserController extends Controller
{

    //use AuthenticatesUsers;
    protected function login(Request $request)
    {

         $request->request->add([
                'grant_type'    => 'password',
                'client_id'     => '3',
                'client_secret' => '6BHCRpB4tpXnQvC1DmpT7CXCSz7ukdw7IeZofiKn',
                'scope' => '*'
            ]);

        // forward the request to the oauth token request endpoint
        $tokenRequest = Request::create('/oauth/token','post');
        return Route::dispatch($tokenRequest);
    }

}

答案 1 :(得分:1)

我最终通过使用wamp virtualhost而不是php artisan serve来解决它。不知道为什么它不能与localhost一起使用。

我将标记为接受任何解释为什么会发生这种情况的答案,以及是否可以在此示例中使用php artisan服务器和guzzle。但是现在,wamp工作。

答案 2 :(得分:0)

卡尔对此有很好的解决方案。如果您正在寻找一种快速修复程序来测试您的更新-您可以通过打开两个命令提示符来完成此任务。第一个将运行php artisan serve(本地默认端口为8000,并且您将在http://localhost:8000上运行站点)。第二个将运行php artisan serve --port 8001

然后,您将发布请求更新为:

$response = $http->post('http://localhost:8001/oauth/token', [
    'form_params' => [
        'grant_type' => 'authorization_code',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'redirect_uri' => 'http://example.com/callback',
        'code' => $request->code,
    ],
]);

这应该在测试期间有所帮助,直到您能够访问服务器或本地虚拟主机上的所有内容为止。

答案 3 :(得分:0)

/**
 * Login function
*/
public function login(Request $request) { 
    
    /* 
        Sample post object
        {
            "username": "test@gmail.com",
            "password": "test123"
        }
    */
    if (Auth::attempt(['email' => request('username'), 'password' => request('password')])) { 
       
        return $this->getToken($request);
    } 
    else { 
        return response()->json(['error'=>'Unauthorised'], 401); 
    } 
}

public function getToken(Request $request) {
    //Get client ID and client Secret
    $client = DB::table('oauth_clients')->where('password_client',1)->first();
    $request->request->add([
        "grant_type" => "password",
        "username" => $request->username,
        "password" => $request->password,
        "client_id"     => $client->id,
        "client_secret" => $client->secret,
    ]);
    // Post to "/oauth/token
    $tokenRequest = $request->create('/oauth/token','post');
    $instance = Route::dispatch($tokenRequest);
    //return token_type, expires_in, access_token, refresh_token
    return response()->json(json_decode($instance->getContent()));

}