同じWebRequestですから、端末の種類で違いが出るとは思えません。
プログラムで異なるのはresultstrの取得方法だけですが、この部分をMT4と同じ方法で試してみましたか?
これ以外何も思いつかないので、これでもダメなら分かりません。
以下は関係あるかどうか分かりませんが、気になる部分です。
result[]はcharではなくucharです。
WHOLE_ARRAYは-1ですが、マニュアルにはWHOLE_ARRAYの使用に関しては記述がありません。
MetaTraderのUTF-8は日本語環境で使うと文字化けすることがあります。
同じWebRequestですから、端末の種類で違いが出るとは思えません。
プログラムで異なるのはresultstrの取得方法だけですが、この部分をMT4と同じ方法で試してみましたか?
これ以外何も思いつかないので、これでもダメなら分かりません。
以下は関係あるかどうか分かりませんが、気になる部分です。
result[]はcharではなくucharです。
WHOLE_ARRAYは-1ですが、マニュアルにはWHOLE_ARRAYの使用に関しては記述がありません。
MetaTraderのUTF-8は日本語環境で使うと文字化けすることがあります
ご回答ありがとうございます。
> 同じWebRequestですから、端末の種類で違いが出るとは思えません。
回答者様と同じ認識です。アプリケーション以外は同じ環境で実施しているため、完全に行き詰っている状況です。。
>プログラムで異なるのはresultstrの取得方法だけですが、この部分をMT4と同じ方法で試してみましたか?
はい、もともと同じコード(厳密にはMQL5はCharToStrがないためCharToString)にしており、レスポンスコードは同じく404でした。返却されたhtmlの日本語部分が文字化けしたため、QAに添付した内容に差し替えています。
>result[]はcharではなくucharです。
WebRequest - ネットワーク関数 - MQL5 リファレンス - MetaTrader 5 のためのアルゴリズムの/自動化されたトレーディング言語のリファレンス
上記ですとcharでの定義なのですが、ucharを使用すべきでしょうか?参照先のリファレンスなどあればご教示いただけると助かります。
※念のためucharでも試してみましたが、結果変わらず、本件との関連はなさそうです。
>WHOLE_ARRAYは-1ですが、マニュアルにはWHOLE_ARRAYの使用に関しては記述がありません。
おっしゃる通り定数での使用がリファレンスに記載されていないため、-1をオンコーディングしてみましたが、結果は変わらずでした。
>MetaTraderのUTF-8は日本語環境で使うと文字化けすることがあります。
ありがとうございます。本件とは関連ありませんでしたが、今後留意いたします。
- www.mql5.com
> 上記ですとcharでの定義なのですが、ucharを使用すべきでしょうか?参照先のリファレンスなどあればご教示いただけると助かります。
間違い。CharArrayToString の result でした。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
※teratailで同様の質問をしておりますが、回答を得られず、こちらでも質問させていただいております。
MT4、MT5からGoogleAppsScript(GAS)で作成したウェブアプリケーションへHttpsリクエストでアクセスし、スプレッドシートの値を取得するというシステムを構築しております。
MT4からのリクエストは正常にレスポンスを受信できるのですが、MT5からの呼出しのみ、レスポンスが以下の返却値とともに404エラーとなります。特定のアプリケーションからの呼出しはGoogle側でエラーを返却するなどの制約があるのでしょうか。ネットワーク周りの知見が不足しているため、お詳しい方にご助力いただきたいです。
MT5からの呼出しの場合も、リクエストは受信され、GASの処理は正常に終了している(MT4からの呼出し時と同じ結果となっている)ことはGASのログ出力より確認済みです。
したがって、GASの処理終了後、Google側のサーバからの返却時に、MT5からの呼出しの場合のみ何らかの理由でレスポンス内容がエラーページに差し替えられていると考えております。
MQL4(レスポンス値200)
MQL5(レスポンス値404)
GAS(共通。doGet()内の戻り値返却箇所のみ抜粋)
MT5からの呼出し時も下記console.logに到達していること、および出力内容に問題がないことを確認済み
MT5側(レスポンス404)のレスポンス内容は以下となります。
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: chunkedMT4(レスポンス200)内容は以下です。(MT5との仕様の違いにより出力順序が逆になっています。resultに"paramError"と出力されていますが、こちらはGASプログラムにおける業務例外のハンドリングのため想定通りの出力で、MT5からの呼出し時の期待結果でもあります)
2021.07.09 03:43:16.262 HttpsGetTest GBPUSD,H1: headers : HTTP/1.1 200 OK Cache-Control: no-cache, no-store, max-age=0, must-revalidate Date: Thu, 08 Jul 2021 18:43:16 GMT Pragma: no-cache Transfer-Encoding: chunked Content-Type: text/plain; charset=utf-8 Expires: Mon, 01 Jan 1990 00:00:00 GMT Accept-Ranges: none Server: GSE Vary: Accept-Encoding Access-Control-Allow-Origin: * X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN Content-Security-Policy: frame-ancestors 'self' X-XSS-Protection: 1; mode=block 2021.07.09 03:43:16.262 HttpsGetTest GBPUSD,H1: result : {"paramError":"E0002"} 2021.07.09 03:43:16.262 HttpsGetTest GBPUSD,H1: res : 200宜しくお願い致します。