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

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

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

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

解決済

1回答

18328閲覧

FuelPHPで、curlでリクエストを投げたが、404になってしまう。コマンドでcurlするとリクエストが可能

usugita_san

総合スコア228

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

2クリップ

投稿2015/05/26 10:14

編集2015/05/27 01:32

環境はEC2でAmazonLinuxを動作させています。

FuelPHPで以下のようなソースでリクエストを投げました。パラメータについてはダミーだとお考え下さい。

lang

1$url = "https://hogehoge.net/hoge/api/login" 2$request = \Request::forge($url, 'curl'); 3$request->set_option(CURLOPT_SSL_VERIFYPEER, false); 4$request->set_method('post'); 5$request->set_params($params); 6$request->add_param($param2); 7$request->execute(); 8$response = $request->response();

その結果h,curlを投げた結果が404で帰ってきました。
FuelPHPのログに以下のようにログがありました。

INFO - 2015-05-26 10:06:34 --> Fuel\Core\Request_Curl::__construct - Creating a new CURL Request with URI = "https://hogehoge.net/hoge/api/login"
INFO - 2015-05-26 10:06:34 --> Fuel\Core\Request::__construct - Creating a new main Request with URI = "error/404"
INFO - 2015-05-26 10:06:34 --> Fuel\Core\Request::execute - Called
INFO - 2015-05-26 10:06:34 --> Fuel\Core\Request::execute - Setting main Request

このリクエスト先は自分自身のサーバです。
httpdのログを見ても、何も表示されておりませんでした。

不思議なのは、linuxのコマンドのcurlを投げた場合、ちゃんとリクエストが届くのです。

このような現象に、どなたか心当たりが無いでしょうか?

curlをコマンドで打つとリクエストが届くので、セキュリティグループの問題ではないと考えています。
FuelPHPの内部的な問題ではないかと思っていますが、configファイルは数週間変更しておりません。

追記です。
Fuel\Core\classes\requestのcurl.phpで、executeメソッドの中を見てみると、

lang

1$this->set_response($body, $this->response_info('http_code', 200), $mime, $headers, isset($this->headers['Accept']) ? $this->headers['Accept'] : null);

という処理の後で、

lang

1if ($body === false) 2{ 3 $this->set_defaults(); 4 throw new \RequestException(curl_error($connection), curl_errno($connection)); 5}

の処理に入ってました。
404エラーとなっていたのは例外処理の結果らしく、根本的にはこのset_responseあたりに問題があるんじゃないかと思っています。
引き続き調べてみます。

さらに追記です。

curl.php の executeメソッドで、

lang

1$body = curl_exec($connection);

の結果、$bodyが空になっていました。

その数行手前で、

lang

1curl_setopt_array($connection, $this->options);

の時点で、$this->options の内容をログに出力した所、以下のようになりました。

(
[> 64] =>
[13] => 30
[19913] => 1
[45] =>
[52] => 1
[10036] => POST
[47] => 1
[10015] => param_name=hogehoge1&param_name2=hogehoge2
)

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

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

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

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

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

guest

回答1

0

ベストアンサー

404 ということは、ウェブサーバでリクエストを受け付け、
ウェブサーバがファイルを探しにいって存在しない場合に返却するレスポンスコードです。

なので、ネットワーク的には問題ないかと思います。

URL(主にファイル名)が正しくない気がしますが、ブラウザからそのURLでアクセスして
画面は表示されますか?

投稿2015/05/26 13:33

kurosawa

総合スコア780

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

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

usugita_san

2015/05/27 01:15

はい。表示されます。 今、FuelのCoreの /fuel/core/classes/request/curl.php にログを入れて確認したのですが、 Request_Curl の public function execute(array $additional_params = array()) というメソッドで、 $this->set_response($body, $this->response_info('http_code', 200), $mime, $headers, isset($this->headers['Accept']) ? $this->headers['Accept'] : null); の後で、 if ($body === false) { logger(\Fuel::L_INFO, 'yasuda test body === false', __METHOD__); $this->set_defaults(); throw new \RequestException(curl_error($connection), curl_errno($connection)); } の中に入ってました・・・ 404エラーになったのは、例外処理の結果らしく、根本的には別の問題だったようです。
kurosawa

2015/05/27 14:33

なるほど。 FuelPHPのcURLでエラーとなった場合、404で返却されてしまうんでしょうね。 (ごめんなさい。FuelPHP詳しくないので余計な返答してしまいました) ちなみに  if ($body === false) のすぐ後で、  curl_error($connection) と  curl_errno($connection) をログに出力してみて、 発生しているエラーコードを下記と照らし合わせてみては如何でしょうか。 http://curl.haxx.se/libcurl/c/libcurl-errors.html また、とんちんかんなこと言っていたらごめんなさい。
usugita_san

2015/05/28 01:23

とんでもございません。私がもう少し詳しく調べてから質問すべきでした。 感謝しております。 curl_errorについても、これから調べてみます。 ありがとうございました。
usugita_san

2015/06/02 00:35

ごめんなさい、理由は解らないのですが、AWSのインスタンスを再起動したら治りました…。OSがそもそも不安定だったのかな?とか考えています。こんなこと、あるんですね…。現在は一切の修正もいらずに正常に動いています。 少々腑に落ちませんが、これで解決としたいと思います。
kurosawa

2015/06/02 11:38

うぇ〜、、、再起動で解消ってことはさまざまな原因が考えられますね... ・Apache再起動で設定が反映された ・ネットワークが再起動され設定が反映された ・メモリ領域が変わったことで不具合が解消された  etc... 私もAWSではありませんが仮想環境でマイグレーションが発生し、 メモリ破壊した事象も経験しているので、なんとも言えませんね。 まずは解決したとのこと。再発しないことを祈ります。 こんなのでベストアンサー頂いて恐縮です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問