前提・実現したいこと
MT4、MT5というFX自動売買用のツールからGASで作成したウェブアプリケーションへHttpsリクエストでアクセスし、スプレッドシートの値を取得するというシステムを構築しております。
自動売買ツールの言語はそれぞれ以下を使用しています。
MT4:MQL4
MT5:MQL5
MT4、MT5のリクエスト先URLおよびリクエスト内容は同じです。
MT4からのリクエストは正常にレスポンスを受信できるのですが、MT5からの呼出しのみ、レスポンスが以下の返却値とともに404エラーとなります。特定のアプリケーションからの呼出しはGoogle側でエラーを返却するなどの制約があるのでしょうか。ネットワーク周りの知見が不足しているため、お詳しい方にご助力いただきたいです。
発生している問題・エラーメッセージ
MT5側のレスポンス内容は以下となります。
2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) res : 404 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) result : <!DOCTYPE html><html lang="ja"><head><meta name="description" content="ウェブ ワープロ、プレゼンテーション、スプレッドシート"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0"><link rel="shortcut icon" href="//docs.google.com/favicon.ico"><title>ページが見つかりません</title><meta name="referrer" content="origin"><link href="//fonts.googleapis.com/css?family=Product+Sans" rel="stylesheet" type="text/css" nonce="QcLBj5wqchgMkSTHYCYHOQ"><style nonce="QcLBj5wqchg 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) .goog-inline-block{position:relative;display:-moz-inline-box;display:inline-block}* html .goog-inline-block{display:inline}*:first-child+html .goog-inline-block{display:inline}#drive-logo{margin:18px 0;position:absolute;white-space:nowrap}.docs-drivelogo-img{background-image:url('//ssl.gstatic.com/images/branding/googlelogo/1x/googlelogo_color_116x41dp.png');background-size:116px 41px;display:inline-block;height:41px;vertical-align:bottom;width:116px}.docs-drivelogo-text{color:#000;display:inline-block;opa 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) headers : Access-Control-Allow-Origin: * 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Cache-Control: no-cache, no-store, max-age=0, must-revalidate 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Pragma: no-cache 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Expires: Mon, 01 Jan 1990 00:00:00 GMT 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Date: Tue, 06 Jul 2021 17:45:28 GMT 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Content-Type: text/html; charset=utf-8 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Content-Encoding: gzip 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Referrer-Policy: origin 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) X-Content-Type-Options: nosniff 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) X-XSS-Protection: 1; mode=block 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Server: GSE 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43" 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Transfer-Encoding: chunked
該当のソースコード
接続先URL
https://script.google.com/macros/s/AKfycbzPK3PZHrEDJLHuWfa02HC8JYz_gupr7afNJx3vldhzYOQvWF5ZYGqG2A/exec
MQL4(レスポンス値200)
//--- string URL ="https://script.google.com/macros/s/AKfycbzPK3PZHrEDJLHuWfa02HC8JYz_gupr7afNJx3vldhzYOQvWF5ZYGqG2A/exec"; string cookie=NULL,headers; char post[],result[]; int res; string getURL=URL; res=WebRequest("GET",URL,cookie,NULL,500,post,0,result,headers); string resultstr=""; for(int j=0; j<ArraySize(result); j++) { resultstr+=CharToStr(result[j]); } Print("res : "+IntegerToString(res)); Print("result : "+resultstr); Print("headers : "+headers);
MQL5(レスポンス値404)
//--- string URL ="https://script.google.com/macros/s/AKfycbzPK3PZHrEDJLHuWfa02HC8JYz_gupr7afNJx3vldhzYOQvWF5ZYGqG2A/exec"; string cookie=NULL,headers; char post[],result[]; int res; string getURL=URL; res=WebRequest("GET",URL,cookie,NULL,500,post,0,result,headers); string resultstr=""; resultstr=CharArrayToString(result,0,WHOLE_ARRAY,CP_UTF8); Print("res : "+IntegerToString(res)); Print("result : "+resultstr); Print("headers : "+headers);
GAS(共通。doGet()内の戻り値返却箇所のみ抜粋)
MT5からの呼出し時も下記console.logに到達していること、および出力内容に問題がないことを確認済み
//スプレッドシート取得結果をjson変換 var returnValue = JSON.stringify(rowData); //返却値をログ出力 console.log("【PJ_CPF_AuthUserGAS】"+returnValue); return ContentService.createTextOutput(returnValue);
試したこと
MT5からの呼出しの場合も、リクエストは受信され、GASの処理は正常に終了している(MT4からの呼出し時と同じ結果となっている)ことはGASのログ出力より確認済みです。
したがって、GASの処理終了後、Google側のサーバからの返却時に、MT5からの呼出しの場合のみ何らかの理由でレスポンス内容がエラーページに差し替えられていると考えております。
補足情報(FW/ツールのバージョンなど)
MT4:build1335
MT5:build2931
あなたの回答
tips
プレビュー