"İnternet üzerinden Terminaller arasında Veri Alışverişi için WinInet.dll Kullanımı" makalesi için tartışma - sayfa 2

 
Graff:

Hata numaraları farklıdır.

hata düzeltildi

fonksiyonunda

int HttpOpenRequestW

6'ncı parametreyi int olarak tanımlamak ve " " yerine 0 geçmek gerekir.

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

 
sergeev:

hata düzeltildi

fonksiyonunda

int HttpOpenRequestW

6'ncı parametreyi int olarak tanımlamak ve " " yerine 0 geçmek gerekir.

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


Çalışmıyor, aynı hatayı alıyorum, nasıl düzeltebilirim?
 
arbuz:
Çalışmıyor, aynı hatayı veriyor, nasıl düzeltebilirim?

Bir hafta önce tüm sınıfların revizyonunu yaptım.

Gayet iyi çalışıyor.

 

Öncelikle bu makale için yazara teşekkür etmek istiyorum. Bu konunun öncelikle orijinal geliştirmelerine sahip olan ve fikri mülkiyetlerini korumak isteyen tüccarlar için geçerli olduğunu düşünüyorum. Alım satım sinyallerini sunucu üzerinden iletme modeli bu amaca gayet uygun.

Alex, makalen mükemmel, ancak çok önemli bir noktaya değinilmediğini düşünüyorum, yani tüm bu verilerin güvenli bir bağlantı (256 bit şifreleme) aracılığıyla şifrelenmiş biçimde nasıl iletileceği. Yani bilgisayar-A'dan gelen sinyaller güvenli bir bağlantı aracılığıyla sunucuya iletilir, buna karşılık bilgisayar-B de bu verileri güvenli bir bağlantı aracılığıyla sunucudan okur. Böyle bir sinyal iletim organizasyonu ile broker, tüm trafik şifreleneceği için bu sinyallerin kaynağını izleyemeyecektir.

Alex, bu konuda ne düşünüyorsun ve güvenlik sorunu nasıl daha etkili bir şekilde çözülebilir?

 
enotis:

Alex, bu konuda ne düşünüyorsun ve güvenlik sorunu nasıl daha etkili bir şekilde çözülebilir?

Sizi makalenin ikinci bölümüne yönlendirmek istiyorum - POST iletimi ve multipart/form-data kullanımı.

Güvenlik konusuna gelince, anladığım kadarıyla SSL sertifikaları ile çalışmaktan bahsediyorsunuz?

Bu, istek oluştururken iki bayrak ekleyerek çözülebilir. Ancak SSL için WinHttp.dll ile çalışmanızı tavsiye ederim.

İstek oluşturma arayüzünde her şey neredeyse aynıdır, ancak daha gelişmiş olarak tanıtılır ve biraz daha fazla özelliğe sahiptir.

 
sergeev:

Sizi makalenin ikinci bölümüne yönlendirmek istiyorum - POST iletimi ve multipart/form-data kullanımı.

Güvenlik konusuna gelince, anladığım kadarıyla SSL sertifikaları ile çalışmaktan bahsediyorsunuz?

Bu, istek oluştururken iki bayrak ekleyerek çözülebilir. Ancak SSL için WinHttp.dll ile çalışmanızı tavsiye ederim.

İstek oluşturma arayüzünde her şey neredeyse aynıdır, ancak daha gelişmiş olarak tanıtılır ve biraz daha fazla özelliğe sahiptir.


Evet, SSL sertifikalarından bahsediyordum. Tavsiyeniz için teşekkürler, dikkate aldım. Sizi doğru anladıysam, bu veri aktarım organizasyonu modelinin yeterince güvenli kabul edilebileceğini kabul ediyor musunuz?
 
enotis:
Evet, SSL sertifikalarından bahsediyordum. Tavsiyeniz için teşekkür ederim, dikkate aldım. Sizi doğru anladıysam, bu veri aktarımı düzenleme modelinin yeterince güvenli sayılabileceği konusunda hemfikir misiniz?

Muhtemelen başka seçenekler de düşünebilirsiniz. Örneğin, verilerinizi kendiniz şifreleyebilir ve açık olarak iletebilirsiniz.

Bu, SSL doğrulaması ile MqlNet sınıfının bir işlevidir

//------------------------------------------------------------------ Request
bool MqlNet::Request(tagRequest &req)
{
  if(!TerminalInfoInteger(TERMINAL_DLLS_ALLOWED)) { Print("-DLL not allowed"); return(false); } // terminalde DLL'ye izin verilip verilmediğini kontrol edin
  if(!MQL5InfoInteger(MQL5_DLLS_ALLOWED)) { Print("-DLL not allowed"); return(false); } // terminalde DLL'ye izin verilip verilmediğini kontrol edin
  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); } }// dosyayı bir dizi halinde oku
  else StringToCharArray(req.stData, data);
  
  if (hSession<=0 || hConnect<=0) { Close(); if (!Open(Host, Port, User, Pass, Service)) { Print("-Err Connect"); Close(); return(false); } }
  // bir istek tanımlayıcısı oluşturun
  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); }
  
  
  // isteği gönder
  int n=0;
  while (n<3) // göndermek için iki deneme yapın. ilki normal, ikincisi SSL gerekliyse
  {
    n++;
    hSend=HttpSendRequestW(hRequest, req.stHead, StringLen(req.stHead), data, ArraySize(data)); // dosyayı gönderdi
    if (hSend<=0) // gönderme başarısız olursa, SSL'i kontrol edin
    {       
      int err=0; err=GetLastError(err); Print("-Err SendRequest= ", err); 
      if (err!=ERROR_INTERNET_INVALID_CA) // eğer hata gerçekten SSL isteği ile ilgiliyse
      {
        int dwFlags;
        int dwBuffLen = sizeof(dwFlags); // ek bayrakları ayarlayın
        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); // gönderildiyse sayfayı oku
  InternetCloseHandle(hRequest); InternetCloseHandle(hSend); // tüm tutamaçları kapatın
  if (hSend<=0) Close(); // hata durumunda kapat
  return(true);
}
 

aşağıdaki bayrakları da ayarlayabilirsiniz

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

 
sergeev:

aşağıdaki bayrakları da ayarlayabilirsiniz

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


Evet, şifreleme için pek çok seçenek var, ancak bu ayrı bir makalenin konusu. Öncelikle barındırma yoluyla sinyalleşme modelini yükseltmemiz gerekiyor. İpuçları için teşekkürler.
 

Merhaba,

Metachat iyi bir fikir ve ben de bir tane çalıştırmak istiyorum.

Fxmaster.de sitesinde referans verilen hiçbir şey artık çalışmıyor - lütfen metachat için PHP kaynağını sağlayabilir misiniz? Çok teşekkürler.