質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Q&A

解決済

3回答

9870閲覧

curl: (7) Failed to connect to localhost port 80: Connection refusedを解決したい

kani-toto

総合スコア16

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

0グッド

0クリップ

投稿2020/07/11 20:59

書籍(Laravel Webアプリケーション開発)でLaravelの勉強をしています。
JWT認証のところでトークン情報を取得するためにcurlコマンドを実行すると、

curl: (7) Failed to connect to localhost port 80: Connection refused

のエラーが出ます。vagrant upして(master)ディレクトリでcurlコマンド実行しています。
調べると同じような問題に数多くの人が直面していていろいろやったのですが、解決できずどなたかご教授お願いします。

試したこと
0. 前回curlができなかった時には.envのDB_PORTを3306にして解決したので試したがだめ。
0. 番号リストport80が使われている?ということでlocalhostに
localhost:3000とかlocalhost:8000とか127.0.0.1にしてみたがエラーのportが変わるだけ。

  1. 番号リストcurl -I www.google.comを実行するとエラーはでません。

Laravel5.5 vagrant virtualbox Homestead 

tymon/jwt-authの準備 

<?php declare(strict_types=1); namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; use Tymon\JWTAuth\Contracts\JWTSubject; class User extends Authenticatable implements JWTSubject { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; public function getJWTIdentifier(): int { return $this->getKey(); } public function getJWTCustomClaims(): array { return []; } }

ドライバの追加

'defaults' => [ 'guard' => 'api', 'passwords' => 'users', ], 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'user_token', 'driver' => 'jwt', 'provider' => 'users', ], ],

ルーティング作成

Route::group(['middleware' => 'api'], function ($router) { Route::post('/users/login', 'User\LoginAction'); Route::post('/users', 'User\RetrieveAction')->middleware('auth:api'); });

TokenResponderクラス

<?php declare(strict_types=1); namespace App\Http\Responder; use Illuminate\Http\JsonResponse; use Illuminate\Http\Response; class TokenResponder { public function __invoke($token, int $ttl): JsonResponse { if(!$token) { return new JsonResponse([ 'error' => 'Unauthorized' ],Response::HTTP_UNAUTHORIZED); } return new JsonResponse([ 'access_token' => $token, 'token_type' => 'bearer', 'expires_in' => $ttl ],Response::HTTP_OK); } }

ログインコントローラクラス

<?php declare(strict_types=1); namespace App\Http\Controllers\User; use App\Http\Controllers\Controller; use App\Http\Responder\TokenResponder; use Illuminate\Auth\AuthManager; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Tymon\JWTAuth\JWTGuard; final class LoginAction extends Controller { private $authManager; public function __construct(AuthManager $authManager) { $this->authManager = $authManager; } public function __invoke(Request $request, TokenResponder $responder): JsonResponse { /** @var JWTGuard $guard */ $guard = $this->authManager->guard('api'); $token = $guard->attempt([ 'email' => $request->get('email'), 'password' => $request->get('password'), ]); return $responder( $token, $guard->factory()->getTTL() * 60 ); } }

curlでトークン情報を取得

$ curl -X POST 'http://localhost/api/users/login' -H 'accept: application/json' -H 'content-type: application/json' -d '{ "email": "mail@example.com", "password": "password" }'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

homesteadって、それに接続するドメインを指定しますよね。yamlファイルに書いていると思いますが

投稿2020/07/12 07:01

yuki84web

総合スコア1857

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kani-toto

2020/07/12 07:02

Localhostのところをそれにすればってことですかね。やってみます。ありがとうございます。
kani-toto

2020/07/12 22:09

homestead.testでいけました。ありがとうございました。hostsファイルも確認すると自分で末尾にIPとhomestead.testと追記していました。
guest

0

vagrant上のブツをホスト上からどーこーするなら、localhostじゃだめなんでは

投稿2020/07/12 01:50

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kani-toto

2020/07/12 05:53

回答ありがとうございます。なんとなくそういった大きなところでずれている感覚はあるのですが…そしたら仮想環境下でlocalhost?とか、とりあえず基礎が足りないんです。
y_waiwai

2020/07/12 07:16

vagrant立ち上げた状態でVirtualBoxの設定>ネットワークアダプタをブリッジにして、立ち上げ直し、vagrant側のIPを調べて、それに対して接続してみてください
kani-toto

2020/07/12 22:17

おかげさまで無事に解決できました。 可能であれば教えて欲しいのですが、コメントでいただいた ”vagrant立ち上げた状態でVirtualBoxの設定>ネットワークアダプタをブリッジにして、立ち上げ直し、vagrant側のIPを調べて、それに対して接続” ってどうやるんですか?すみません。もし可能であれば教えてください。
guest

0

curl: (7) Failed to connect to localhost port 80: Connection refused

localhost の 80 port で listen できてないことが原因です。
インフラの基礎を学習してください。

投稿2020/07/11 23:34

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kani-toto

2020/07/12 05:51

hosts確認してみます。インフラ学んだことないので勉強します。ありがとうございます。ちなみに何かおすすめの勉強法とかありますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問