記事"インターネットを介して端末間でデータ交換をするためのWinInet.dll利用"についてのディスカッション - ページ 2

 
Graff:

エラー番号が異なる。

エラーが修正されました

関数内の

int HttpOpenRequestW

第6パラメータを int で定義し、" " の代わりに 0 を渡す必要があります。

int HttpOpenRequestW(int hConnect, string &lpszVerb, string &lpszObjectName, string &lpszVersion, string &lpszReferer, int lplpszAcceptTypes, uint dwFlags, int dwContext);

 
sergeev:

エラー訂正

関数内の

int HttpOpenRequestW

第6パラメータを int で定義し、" " の代わりに 0 を渡す必要があります。

int HttpOpenRequestW(int hConnect, string &lpszVerb, string &lpszObjectName, string &lpszVersion, string &lpszReferer, int lplpszAcceptTypes, uint dwFlags, int dwContext);


同じエラーが表示されます。
 
arbuz:
同じエラーが表示されてうまくいきません。

1週間前にすべてのクラスを修正したばかりです。

うまくいっています。

 

まず最初に、この記事を書いてくれた著者に感謝したい。このトピックは、すでに独自の開発品を持ち、その知的財産を守ろうとするトレーダーにとって、主に適切なものだと思う。サーバーを通じて売買シグナルを送信するというモデルは、この目的にぴったりです。

アレックス、あなたの記事は素晴らしいですが、非常に重要な点が触れられていないと思います。つまり、安全な接続(256ビットの暗号化)を通じて、暗号化された形式ですべてのデータを送信する方法です。つまり、コンピュータAからの信号は安全な接続を通じてサーバーに送信され、コンピュータBもまた安全な接続を通じてサーバーからこれらのデータを読み取る。このようなシグナル送信の組織では、すべてのトラフィックが暗号化されるため、ブローカーはこれらのシグナルの送信元を追跡することはできません。

アレックス、これについてどう思いますか?また、セキュリティ問題をより効果的に解決するにはどうすればよいでしょうか?

 
enotis:

アレックス、これについてどう思いますか?また、セキュリティの問題をより効果的に解決するにはどうしたらよいでしょうか?

記事の後半部分、POST送信とmultipart/form-dataの使用をご覧いただきたい。

セキュリティに関しては、SSL証明書での作業について話しているのですね?

これはリクエスト作成時に2つのフラグを追加することで解決できます。しかし、SSLにはWinHttp.dllを使用することをお勧めします。

リクエスト作成のインターフェースはほとんど同じですが、より高度で、より多くの機能を持っていると宣伝されています。

 
sergeev:

記事の後半部分、POST送信とmultipart/form-dataの使い方をご覧いただきたい。

セキュリティに関しては、SSL証明書を使用することについて話しているのですね?

これはリクエスト作成時に2つのフラグを追加することで解決できます。しかし、私はSSL用にWinHttp.dllを使用することをお勧めします。

リクエスト作成のインターフェースはほとんど同じですが、より高度で、より多くの機能を持っていると宣伝されています。


はい、SSL証明書のことです。アドバイスありがとうございます。私の理解が正しければ、データ転送組織のこのモデルは十分に安全であるとみなすことができることに同意しますか?
 
enotis:
はい、SSL証明書のことです。ご助言ありがとうございます。私の理解が正しければ、このデータ転送モデルは十分に安全であると考えられるということですね?

例えば、ご自身でデータを暗号化し、オープンに送信することも可能です。

これはMqlNetクラスの機能で、SSL検証付きです。

//------------------------------------------------------------------ Request
bool MqlNet::Request(tagRequest &req)
{
  if(!TerminalInfoInteger(TERMINAL_DLLS_ALLOWED)) { Print("-DLL not allowed"); return(false); } // ターミナルでDLLが許可されているかチェックする。
  if(!MQL5InfoInteger(MQL5_DLLS_ALLOWED)) { Print("-DLL not allowed"); return(false); } // ターミナルでDLLが許可されているかチェックする。
  if (req.toFile && req.stOut=="") { Print("-File not specified "); return(false); }
  uchar data[]; int hRequest, hSend; 
  string Vers="HTTP/1.1"; string nill="";
  if (req.fromFile) { if (FileToArray(req.stData, data)<0) { Print("-Err reading file "+req.stData); return(false); } }// ファイルを配列に読み込む
  else StringToCharArray(req.stData, data);
  
  if (hSession<=0 || hConnect<=0) { Close(); if (!Open(Host, Port, User, Pass, Service)) { Print("-Err Connect"); Close(); return(false); } }
  // リクエスト記述子を作成する
  hRequest=HttpOpenRequestW(hConnect, req.stVerb, req.stObject, Vers, nill, 0, INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_RELOAD|INTERNET_FLAG_PRAGMA_NOCACHE, 0); 
  if (hRequest<=0) { Print("-Err OpenRequest"); InternetCloseHandle(hConnect); return(false); }
  
  
  // リクエストを送信する
  int n=0;
  while (n<3) // 1回目は通常、2回目はSSLが必要な場合
  {
    n++;
    hSend=HttpSendRequestW(hRequest, req.stHead, StringLen(req.stHead), data, ArraySize(data)); // ファイルを送信
    if (hSend<=0) // 送信に失敗したら、SSLをチェックする
    {       
      int err=0; err=GetLastError(err); Print("-Err SendRequest= ", err); 
      if (err!=ERROR_INTERNET_INVALID_CA) // エラーが本当にSSLリクエストに関連している場合
      {
        int dwFlags;
        int dwBuffLen = sizeof(dwFlags); // 追加のフラグを設定する
        InternetQueryOptionW(hRequest, INTERNET_OPTION_SECURITY_FLAGS, dwFlags, dwBuffLen);
        dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
        int rez=InternetSetOptionW(hRequest, INTERNET_OPTION_SECURITY_FLAGS, dwFlags, sizeof (dwFlags));
        if (!rez) { Print("-Err InternetSetOptionW= ", GetLastError(err)); break; }
      }
      else break;
    } 
    else break;
  }
  if (hSend>0) ReadPage(hRequest, req.stOut, req.toFile); // ページが送信されたら読む
  InternetCloseHandle(hRequest); InternetCloseHandle(hSend); // すべてのハンドルを閉じる
  if (hSend<=0) Close(); // エラー時に閉じる
  return(true);
}
 

以下のフラグを設定することもできる。

dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
dwFlags |= SECURITY_FLAG_IGNORE_CERT_DATE_INVALID;
dwFlags |= SECURITY_FLAG_IGNORE_CERT_CN_INVALID;

 
sergeev:

以下のフラグを設定することもできる。

dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
dwFlags |= SECURITY_FLAG_IGNORE_CERT_DATE_INVALID;
dwFlags |= SECURITY_FLAG_IGNORE_CERT_CN_INVALID;


そう、暗号化にはたくさんのオプションがあるのだが、これは別の記事のテーマとしよう。まずはホスティングによるシグナリングの モデルを上げる必要がある。ヒントをありがとう。
 

こんにちは、

Metachatは良いアイデアだと思います。

fxmaster.deのサイトで参照されているものはもう動いていません。ありがとうございました。