前提・実現したいこと
MQL(MT4)のインジケーターで、LINE通知をできるようにコードを書いています。
下記のようにソースコードを作成しました。
データは送信できているようなのですが、LINE通知はできておらず、エラーが出てしまいます。
おそらくHttpSendRequestWのヘッダーの書き方が悪いのかなと思うのですが、解決策がわかりません。
コードの不備や解決策を知りたいです。
よろしくお願いします。
発生している問題・エラーメッセージ
MQL
1//Print("Data Send : toStr")コード部分です 2//Data Send : {"status":405,"message":"Method Not Allowed"}
該当のソースコード
MQL
1#import "wininet.dll" 2int InternetAttemptConnect(int x); 3int InternetOpenW(string &sAgent, int lAccessType, string &sProxyName, string &sProxyBypass, int lFlags); 4int InternetConnectW(int hInternet, string &szServerName, int nServerPort, string &lpszUsername, string &lpszPassword, int dwService, int dwFlags, int dwContext); 5int HttpOpenRequestW(int hConnect, string &Verb, string &ObjectName, string &Version, string &Referer, string &AcceptTypes, uint dwFlags, int dwContext); 6int HttpSendRequestW(int hRequest, string &lpszHeaders, int dwHeadersLength, uchar &lpOptional[], int dwOptionalLength); 7int HttpQueryInfoW(int hRequest, int dwInfoLevel, int &lpvBuffer[], int &lpdwBufferLength, int &lpdwIndex); 8int InternetReadFile(int hFile, uchar &sBuffer[], int lNumBytesToRead,int &lNumberOfBytesRead); 9int InternetCloseHandle(int hInet); 10#import 11 12//token⇒アクセストークン 13//message⇒通知内容 14 15string Linenotify(string token, string message){ 16 string headers; 17 int session = 0; int connect = 0; 18 int hRequest, hSend; 19 uchar post[]; 20 21 if(!TerminalInfoInteger(TERMINAL_DLLS_ALLOWED)){ 22 Print("DLL is not allowed"); 23 return(false); 24 } 25 26 string message1 = message + "\n" + IntegerToString(Period()); 27 28 ArrayResize(post, StringToCharArray("message=" + message1, post, 0, WHOLE_ARRAY, CP_UTF8) - 1); 29 30 string UserAgent = "HachiwareMT4"; 31 string nill = ""; 32 33 session = InternetOpenW(UserAgent, 0, nill, nill, 0); 34 if(session <= 0){ 35 if(session > 0) InternetCloseHandle(session); session = -1; 36 if(connect > 0) InternetCloseHandle(connect); connect = -1; 37 Print("Err CreateSession"); 38 return(NULL); 39 } 40 41 string host = "notify-api.line.me"; 42 connect = InternetConnectW(session, host, 0, nill, nill, SERVICE_HTTP, 0, 0); 43 if(connect <= 0){ 44 if(session > 0) InternetCloseHandle(session); session = -1; 45 if(connect > 0) InternetCloseHandle(connect); connect = -1; 46 Print("Err create Connect"); 47 return(NULL); 48 } 49 50 string Vers = "HTTP/1.1"; 51 string POST = "POST"; 52 string Object = "/api/notify.php"; 53 54 hRequest = HttpOpenRequestW(connect, POST, Object, Vers, nill, nill, FLAG_KEEP_CONNECTION|FLAG_RELOAD|FLAG_PRAGMA_NOCACHE, 0); 55 if(hRequest <= 0){ 56 if(session > 0) InternetCloseHandle(session); session = -1; 57 if(connect > 0) InternetCloseHandle(connect); connect = -1; 58 Print("Err OpenRequest"); 59 return(NULL); 60 } 61 62 headers = "Authorization: Bearer " + token + "\r\n"; 63 headers += "Content-Type: application/x-www-form-urlencoded\r\n"; 64 65 hSend = HttpSendRequestW(hRequest, headers, StringLen(headers), post, ArraySize(post)); 66 uchar ch[100]; 67 string toStr = ""; 68 int dwBytes; 69 while(InternetReadFile(hRequest, ch, 100, dwBytes)){ 70 if(dwBytes <= 0) break; 71 toStr = CharArrayToString(ch, 0, dwBytes); 72 } 73 74 if(hSend <= 0){ 75 Print("Err SendRequest"); 76 if(connect > 0) InternetCloseHandle(hRequest); 77 if(session > 0) InternetCloseHandle(session); session = -1; 78 if(connect > 0) InternetCloseHandle(connect); connect = -1; 79 } 80 81 InternetCloseHandle(hSend); 82 InternetCloseHandle(hRequest); 83 if(session > 0) InternetCloseHandle(session); session = -1; 84 if(connect > 0) InternetCloseHandle(connect); connect = -1; 85 86 Print("Data Send : toStr"); 87 return(hSend); 88} 89
補足情報(FW/ツールのバージョンなど)
Version:5.00 build:2375です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/11 22:15