기고글 토론 "인터넷을 통한 터미널 간 데이터 교환에 WinInet.dll 사용하기" - 페이지 2

 
Graff:

오류 번호가 다릅니다.

오류가 수정되었습니다.

함수의

int HttpOpenRequestW

함수에서 6번째 파라미터를 int로 정의하고 " " 대신 0을 전달해야 합니다.

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

 
sergeev:

오류 수정

함수에서

int HttpOpenRequestW

에서 6번째 파라미터를 int로 정의하고 " " 대신 0을 전달해야 합니다.

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


작동하지 않고 동일한 오류가 발생하는데 어떻게 수정해야 하나요?
 
arbuz:
작동하지 않고 같은 오류가 표시되는데 어떻게 수정해야 하나요?

일주일 전에 모든 수업을 수정했습니다.

정상적으로 작동합니다.

 

먼저 이 글을 작성해 주신 저자에게 감사의 말씀을 드립니다. 이 주제는 주로 이미 독창적인 개발을 하고 지적 재산을 보호하고자 하는 트레이더와 관련이 있다고 생각합니다. 서버를 통해 거래 신호를 전송하는 모델은 이러한 목적에 잘 맞습니다.

Alex, 귀하의 기사는 훌륭하지만 매우 중요한 점, 즉 보안 연결 (256 비트 암호화)을 통해이 모든 데이터를 암호화 된 형태로 전송하는 방법에 대해 다루지 않았다고 생각합니다. 즉, 컴퓨터 A의 신호는 보안 연결을 통해 서버로 전송되고, 컴퓨터 B도 보안 연결을 통해 서버에서 이러한 데이터를 읽습니다. 이러한 신호 전송 조직을 사용하면 모든 트래픽이 암호화되므로 브로커는 이러한 신호의 출처를 추적할 수 없습니다.

알렉스, 이에 대해 어떻게 생각하며 보안 문제를 보다 효과적으로 해결할 수 있는 방법은 무엇일까요?

 
enotis:

알렉스, 이에 대해 어떻게 생각하며 보안 문제를 보다 효과적으로 해결할 수 있는 방법은 무엇일까요?

이 글의 두 번째 부분인 멀티파트/폼 데이터의 POST 전송 및 사용으로 안내해 드리고자 합니다.

보안과 관련하여 SSL 인증서 작업에 대해 말씀하시는 것으로 알고 있습니다.

요청을 만들 때 두 개의 플래그를 추가하면 이 문제를 해결할 수 있습니다. 하지만 SSL의 경우 WinHttp.dll로 작업하는 것이 좋습니다.

요청 생성 인터페이스에서 모든 것이 거의 동일하지만 더 고급으로 광고되고 조금 더 많은 기능이 있습니다.

 
sergeev:

이 글의 두 번째 부분인 POST 전송 및 멀티파트/양식 데이터 사용으로 안내해드리겠습니다.

보안과 관련하여 SSL 인증서 작업에 대해 말씀하시는 것으로 알고 있습니다.

요청을 생성할 때 두 개의 플래그를 추가하면 이 문제를 해결할 수 있습니다. 하지만 SSL의 경우 WinHttp.dll로 작업하는 것이 좋습니다.

요청 생성 인터페이스에서 모든 것이 거의 동일하지만 더 고급으로 광고되고 조금 더 많은 기능이 있습니다.


네, SSL 인증서를 언급하고 있었습니다. 조언 주셔서 감사합니다. 고려하고 있습니다. 제가 올바르게 이해했다면 이 데이터 전송 조직 모델이 충분히 안전한 것으로 간주될 수 있다는 데 동의하시나요?
 
enotis:
네, SSL 인증서를 언급하고 있었습니다. 조언을 주셔서 감사드리며 이를 고려했습니다. 제가 올바르게 이해했다면 데이터 전송을 구성하는 이 모델이 충분히 안전한 것으로 간주될 수 있다는 데 동의하시나요?

다른 옵션도 생각해 볼 수 있습니다. 예를 들어 데이터를 직접 암호화하여 공개적으로 전송할 수 있습니다.

이것은 SSL 인증이 있는 MqlNet 클래스의 기능입니다.

//------------------------------------------------------------------ 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) // 두 번 전송을 시도합니다. 첫 번째는 정상, 두 번째는 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;


예, 암호화에는 많은 옵션이 있지만 이것은 별도의 기사의 주제입니다. 먼저 호스팅을 통해 시그널링 모델을 높여야 합니다. 팁을 주셔서 감사합니다.
 

안녕하세요,

메타챗은 좋은 아이디어이며 직접 작동하도록 하고 싶습니다.

fxmaster.de 사이트에서 참조한 것이 더 이상 작동하지 않습니다. PHP 소스를 메타챗에 제공해 주시겠습니까? 감사합니다.