前提・実現したいこと
linebotからpythonのbottleサーバへのhttpリクエストを送信したいです。
linebotはphpで作成しており、herokuを使用しています。
この記事を参考にさせていただきました。https://qiita.com/skycat_me/items/9f27cbd9354515df744a
無事にlinebotは作成できましたが、httpリクエストをcurlで行ったところ、Request timeoutとエラーがでました。
発生している問題・エラーメッセージ
2019-01-22T01:16:16.911584+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/" host=erekon.herokuapp.com request_id=37e586c2-c415-41c2-85b1-993c0934744a fwd="203.104.146.154" dyno=web.1 connect=1ms service=30000ms status=503 bytes=0 protocol=https
2019-01-22T09:03:24.513663+00:00 app[web.1]: [Tue Jan 22 09:03:24.511192 2019] [proxy_fcgi:error] [pid 137:tid 140615585076992] (70007)The timeout specified has expired: [client 10.113.237.99:32593] AH01075: Error dispatching request to : (polling)
該当のソースコード
php
1 2<?php 3require_once __DIR__ . '/vendor/autoload.php'; 4error_log("start"); 5 6// POSTを受け取る 7$postData = file_get_contents('php://input'); 8error_log($postData); 9 10// jeson化 11$json = json_decode($postData); 12$event = $json->events[0]; 13error_log(var_export($event, true)); 14 15// ChannelAccessTokenとChannelSecret設定 16$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient(getenv('LineMessageAPIChannelAccessToken')); 17$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => getenv('LineMessageAPIChannelSecret')]); 18 19// イベントタイプがmessage以外はスルー 20if ($event->type != "message") 21 return; 22$replyMessage = null; 23 24// メッセージタイプが文字列の場合 25if ($event->message->text == "テレビ") { 26 27 $ch = curl_init(); 28 29 curl_setopt($ch, CURLOPT_URL, "http://192.168.33.10:8080/"); 30 curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); 31 32 $html = curl_exec($ch); 33 34 $replyMessage = $html; 35 36 curl_close($ch); 37 38} else { 39 $replyMessage = $event->message->text; 40} 41 42// メッセージ作成 43$textMessageBuilder = new \LINE\LINEBot\MessageBuilder\TextMessageBuilder($replyMessage); 44 45// メッセージ送信 46$response = $bot->replyMessage($event->replyToken, $textMessageBuilder); 47error_log(var_export($response,true)); 48 49return;
試したこと
●exec関数を使い、curlを使ったリクエストの別プログラムを呼び出すことも考えましたが、bottleサーバの方にはアクセスしたログがありませんでした。
●curl_multiというものも使ってみたのですが、curlの時と同様の結果でした。
●file_get_contentsも同様でした。
●linebotのプログラムで動かす前に、いずれもローカルでプログラムを動かしましたが、そこでは期待する値が返ります。
●curlではもともと例文として載っていた http://example.com/ の方ではtrueが返ってきます。
補足情報(FW/ツールのバージョンなど)
php7.2
あなたの回答
tips
プレビュー