新しい「sk-proj」タイプのOpenAIキーが途中で切れる?WebRequestが常に「APIキーが提供されていません」と返してしまう 新しいコメント Mikoto Hamazono 2025.01.08 05:18 かなり困っております・・・ MQL5(MetaTrader 5)で WebRequest() を使い、ChatGPT(gpt-3.5-turbo) に接続しようとしています。具体的には、 https://api.openai.com/v1/chat/completions にアクセスしているのですが、常に 401 エラーが返ってきて、以下のメッセージが表示されます。 「APIキーが提供されていません。Bearer認証ヘッダでAPIキーを渡す必要があります…」 つまり、 Authorization: Bearer ヘッダが、OpenAI側で認識されていないようなのです。 ポイント: 新しい “sk-proj” APIキーの長さ OpenAIのプロジェクトキーは 100文字以上になる場合があり、MQL5 で長すぎて途中で切られてしまっているのかと疑っています。 WebRequest の許可設定 MetaTraderの [ツール] → [オプション] → [エキスパートアドバイザ] 画面で、 https://api.openai.com を “Allow WebRequest” に登録済みです。 複数のMT5ビルドを試した ブローカー版だけでなく、MetaQuotes公式の最新ビルドも試しました。しかし、結果は同じく WebRequest が 401 を返し、「APIキーを提供していない」と言われます。 Fiddler / Wireshark を使った解析 HTTPSトラフィックを傍受して、 Authorization: Bearer sk-xxx が送られているか確認したいのですが、MetaTrader側がMITM証明書を受け付けないのか、CONNECTトンネルだけ見えて内容がわかりません。 一方で、同じキーを curl や Pythonスクリプト で使うと、問題なくChatGPTにアクセスできます。つまり、キー自体は有効なのに、MQL5 の WebRequest() では常に「APIキーが無い」とOpenAIに言われる状態です。 質問: 新しい「sk-proj-...」形式の長いキー(100文字以上)を、MQL5の WebRequest() で正常に利用できた方はいますか? Authorization ヘッダが長すぎる or カスタムヘッダが落ちるなどの制限が WebRequest() に存在するのでしょうか? あるいは、MetaTrader のアップデートによる対応を待つしかないのでしょうか? 何か回避策をご存じの方がいれば、ぜひ教えていただきたいです。 以下サンプルコード //+------------------------------------------------------------------+ //| ChatGPTRequest.mq5 | //| MQL5のエキスパート(Utility用途): 401エラーの最小例 | //+------------------------------------------------------------------ #property script_show_inputs void OnStart() { // 1) 新しい “sk-proj-...” キー(100文字以上の例) string openai_api_key = "sk-proj-EXAMPLE_KEY_which_is_quite_long..."; // 2) 簡単なJSONボディ string json_body = "{\"model\":\"gpt-3.5-turbo\"," "\"messages\":[{\"role\":\"user\",\"content\":\"Hello!\"}]," "\"max_tokens\":50}"; // JSONをUTF-8のchar配列に変換 char data[]; int size = StringToCharArray(json_body, data, 0, StringLen(json_body), CP_UTF8); ArrayResize(data, size + 1); data[size] = 0; // null終端 // 3) ヘッダ(Authorizationを含む) string headers = "Content-Type: application/json\r\n" "Authorization: Bearer " + openai_api_key + "\r\n" "\r\n"; // 4) WebRequest呼び出し char resultBuf[]; string cookie; int timeoutMs = 10000; string openai_url = "https://api.openai.com/v1/chat/completions"; int res = WebRequest( "POST", openai_url, headers, "", // params は空 timeoutMs, data, size, resultBuf, cookie ); Print("WebRequest return=", res); if(res == -1) { Print("Error code: ", GetLastError()); } else { string response = CharArrayToString(resultBuf, 0, -1); Print("OpenAI response: ", response); } } 結果: 常に 401 エラーが返り、 "You didn't provide an API key..." と表示されてしまいます。 もし何か解決策や、 Authorization: Bearer ヘッダを長いキーでも正常に送る方法が分かる方がいれば、ぜひアドバイスをいただきたいです。よろしくお願いいたします。 New sk-proj OpenAI Key Truncated? WebRequest Always Returns You didn t provide an API key. Connexusにおけるヘッダ(第3部):リクエスト用HTTPヘッダの使い方をマスターする HTTPとConnexus(第2回):HTTPアーキテクチャとライブラリ設計の理解 Shino Unada 2025.01.08 07:07 #1 ChaGPT APIを使っているんですか? それならAPIをインポートして、それを通じて接続しないと無理なのと違いますか? Mikoto Hamazono 2025.01.08 07:33 #2 Shino Unada #: ChaGPT APIを使っているんですか? それならAPIをインポートして、それを通じて接続しないと無理なのと違いますか? コメントありがとうございます。自前でwebrequest解決しようとしましたが無理筋でした。 OpenAI Library MT5 by StormWave のようなものを入れても、ヘッダ落ちが解決するかわからず、もし他に安定したやり方やライブラリがありましたら、ぜひ教えていただけると助かりますm(__)m Shino Unada 2025.01.08 07:45 #3 私は ChaGPTを使ってないし、通信用のAPIをMT5で使った経験もないので分かりません。 英語フォーラムで質問したほうが回答を得やすいと思います。 Mikoto Hamazono 2025.01.23 09:18 #4 こちらライブラリを自作することで解決いたしました。ありがとうございました。 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
かなり困っております・・・
MQL5(MetaTrader 5)で WebRequest() を使い、ChatGPT(gpt-3.5-turbo) に接続しようとしています。具体的には、 https://api.openai.com/v1/chat/completions にアクセスしているのですが、常に 401 エラーが返ってきて、以下のメッセージが表示されます。
つまり、 Authorization: Bearer ヘッダが、OpenAI側で認識されていないようなのです。
ポイント:
新しい “sk-proj” APIキーの長さ
WebRequest の許可設定
複数のMT5ビルドを試した
Fiddler / Wireshark を使った解析
一方で、同じキーを curl や Pythonスクリプト で使うと、問題なくChatGPTにアクセスできます。
つまり、キー自体は有効なのに、MQL5 の WebRequest() では常に「APIキーが無い」とOpenAIに言われる状態です。
質問:
以下サンプルコード
結果:
もし何か解決策や、 Authorization: Bearer ヘッダを長いキーでも正常に送る方法が分かる方がいれば、ぜひアドバイスをいただきたいです。
よろしくお願いいたします。