FuelPHPで、curlでリクエストを投げたが、404になってしまう。コマンドでcurlするとリクエストが可能
- 評価
- クリップ 2
- VIEW 10K+
環境はEC2でAmazonLinuxを動作させています。
FuelPHPで以下のようなソースでリクエストを投げました。パラメータについてはダミーだとお考え下さい。
その結果h,curlを投げた結果が404で帰ってきました。
FuelPHPのログに以下のようにログがありました。
このリクエスト先は自分自身のサーバです。
httpdのログを見ても、何も表示されておりませんでした。
不思議なのは、linuxのコマンドのcurlを投げた場合、ちゃんとリクエストが届くのです。
このような現象に、どなたか心当たりが無いでしょうか?
curlをコマンドで打つとリクエストが届くので、セキュリティグループの問題ではないと考えています。
FuelPHPの内部的な問題ではないかと思っていますが、configファイルは数週間変更しておりません。
追記です。
Fuel\Core\classes\requestのcurl.phpで、executeメソッドの中を見てみると、
の処理に入ってました。
404エラーとなっていたのは例外処理の結果らしく、根本的にはこのset_responseあたりに問題があるんじゃないかと思っています。
引き続き調べてみます。
さらに追記です。
curl.php の executeメソッドで、
の結果、$bodyが空になっていました。
その数行手前で、
FuelPHPで以下のようなソースでリクエストを投げました。パラメータについてはダミーだとお考え下さい。
$url = "https://hogehoge.net/hoge/api/login"
$request = \Request::forge($url, 'curl');
$request->set_option(CURLOPT_SSL_VERIFYPEER, false);
$request->set_method('post');
$request->set_params($params);
$request->add_param($param2);
$request->execute();
$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メソッドの中を見てみると、
$this->set_response($body, $this->response_info('http_code', 200), $mime, $headers, isset($this->headers['Accept']) ? $this->headers['Accept'] : null);
という処理の後で、
if ($body === false)
{
$this->set_defaults();
throw new \RequestException(curl_error($connection), curl_errno($connection));
}
の処理に入ってました。
404エラーとなっていたのは例外処理の結果らしく、根本的にはこのset_responseあたりに問題があるんじゃないかと思っています。
引き続き調べてみます。
さらに追記です。
curl.php の executeメソッドで、
$body = curl_exec($connection);
の結果、$bodyが空になっていました。
その数行手前で、
curl_setopt_array($connection, $this->options);
の時点で、$this->options の内容をログに出力した所、以下のようになりました。
(> )
[> 64] =>
[13] => 30
[19913] => 1
[45] =>
[52] => 1
[10036] => POST
[47] => 1
[10015] => param_name=hogehoge1¶m_name2=hogehoge2
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
404 ということは、ウェブサーバでリクエストを受け付け、
ウェブサーバがファイルを探しにいって存在しない場合に返却するレスポンスコードです。
なので、ネットワーク的には問題ないかと思います。
URL(主にファイル名)が正しくない気がしますが、ブラウザからそのURLでアクセスして
画面は表示されますか?
ウェブサーバがファイルを探しにいって存在しない場合に返却するレスポンスコードです。
なので、ネットワーク的には問題ないかと思います。
URL(主にファイル名)が正しくない気がしますが、ブラウザからそのURLでアクセスして
画面は表示されますか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.13%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2015/05/27 10: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エラーになったのは、例外処理の結果らしく、根本的には別の問題だったようです。
2015/05/27 23:33
FuelPHPのcURLでエラーとなった場合、404で返却されてしまうんでしょうね。
(ごめんなさい。FuelPHP詳しくないので余計な返答してしまいました)
ちなみに
if ($body === false)
のすぐ後で、
curl_error($connection) と curl_errno($connection)
をログに出力してみて、
発生しているエラーコードを下記と照らし合わせてみては如何でしょうか。
http://curl.haxx.se/libcurl/c/libcurl-errors.html
また、とんちんかんなこと言っていたらごめんなさい。
2015/05/28 10:23
感謝しております。
curl_errorについても、これから調べてみます。
ありがとうございました。
2015/06/02 09:35
少々腑に落ちませんが、これで解決としたいと思います。
2015/06/02 20:38
・Apache再起動で設定が反映された
・ネットワークが再起動され設定が反映された
・メモリ領域が変わったことで不具合が解消された
etc...
私もAWSではありませんが仮想環境でマイグレーションが発生し、
メモリ破壊した事象も経験しているので、なんとも言えませんね。
まずは解決したとのこと。再発しないことを祈ります。
こんなのでベストアンサー頂いて恐縮です。