기고글 토론 "MQL5에서 WinInet 사용하기 파트 2: POST 리퀘스트 및 파일"

 

새로운 기고글 MQL5에서 WinInet 사용하기 파트 2: POST 리퀘스트 및 파일 가 게재되었습니다:

본 문서에서는 우리는 인터넷을 HTTP 리퀘스트를 다루는 법에 대하여 계속하여 알아보고 실제 서버와 정보 교환을 해볼 것입니다. CMqlNet 클래스 내의 신규 함수를 다뤄보고 POST 리퀘스트를 통해 정보를 보내는 메소드, 그리고 Cookies를 이용해 홈페이지 로그인 인증을 처리하는 것을 다뤄봅니다.

이전 레슨 "인터넷을 경유로 터미널간 데이터 교환을 위해 WinInet.dll 활용하기" 에서 라이브러리를 다루는 법, 홈페이지를 여는 법, GET 리퀘스트를 통해 데이터를 보내고 받는 법에 대해 알아봤습니다.

이번 레슨에서는 이하를 배울 것입니다.

  • 서버에 POST 리퀘스트를 보내기
  • multipart/form-data 표현 메소드를 이용하여 서버에 파일 송신하기
  • Cookies를 다루고 로그인 시 홈페이지에서 정보 읽기

예전에도 말씀드렸다시피 로컬 프록시 서버 Charles를 셋업 하시는 것을 추천드립니다. 앞으로 배우시고, 시험할 때에 필요할 것입니다.

작성자: ---

 

안녕하세요 Alex,

좋은 글입니다 - '파트 3'에 대한 요청이 있습니다: XML-RPC 클라이언트 통신(및 가능한 경우 서버)에 대한 요청이 있습니다.

Cheerz

 

다음 문을실행할 때 시스템이 충돌하는데 어떻게 해결해야 하나요?

hConnect=InternetConnectW(hSession, aHost, aPort, aUser, aPass, aService, 0, 0);

오류: '......ex5'에서 0x0000000000001F94로 액세스 위반을 읽었습니다.

 

161줄에 작은 버그가 있습니다. 그 줄이 있어야 합니다:

else StringToCharArray(req.stData, data, 0, StringLen(req.stData));

터미널 0이 배열에 복사되고 HttpSendRequestW가 터미널 0(추가 문자 등)을 마지막 포스트 변수 값으로 보내기 때문입니다. 예를 들어 데이터가 다음과 같은 경우입니다:

var1=value1&var2=value2

값1에 연결된 var1과 값2\0에 연결된 var2가 웹 페이지에 표시됩니다.

훌륭한 글입니다. 공유해 주셔서 감사합니다.


Regards

 
마지막 MT5 업그레이드 후 윈넷을 사용할 수 없으며 IR에서 액세스 위반 오류가 발생합니다. 이 오류를 극복할 수 있는 제안이나 해결책이 있나요? 나는 성공하지 않고 노력해 왔습니다.
 
액세스 위반 오류가 해결되었지만 현재 POST 요청이 작동하지 않습니다. uchar 배열의 데이터가 dll 함수에 올바르게 전송되지 않는 것 같습니다.
 
mundoforex:

액세스 위반 오류가 해결되었지만 현재 POST 요청이 작동하지 않습니다. uchar 배열의 데이터가 dll 함수에 올바르게 전송되지 않는 것 같습니다.
시간이 지난 후에도 여전히 액세스 위반 오류가 발생합니다.
 
왜 아무도 이 문제에 관심을 두지 않나요?
 
mundoforex:

왜 아무도 이 문제에 신경을 쓰지 않나요?
나는 당신과 함께합니다... 필사적으로 해결책을 기다리고 있지만 아무도 대답하지 않습니다. 마지막 업데이트가 관리자가 말한대로 문제를 해결할 것이라고 생각했지만 업데이트 후 다시는 대답하지 않았습니다 :(
 

또한 이 객체 클래스에서 액세스 위반 오류가 발생했습니다. 문제는 '0'을 NULL 포인터로 사용하여 HttpOpenRequestW 함수를 호출하는 데 있었습니다. 호출을

---   hRequest=HttpOpenRequestW(hConnect, req.stVerb, req.stObject, Vers, nill, 0, INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_RELOAD|INTERNET_FLAG_PRAGMA_NOCACHE, 0); 

을 호출로 바꾸어 보세요:

+++   hRequest=HttpOpenRequestW(hConnect, req.stVerb, req.stObject, Vers, NULL, NULL , INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_RELOAD|INTERNET_FLAG_PRAGMA_NOCACHE, 0); 


재밌는 점은 부적절한 NULL 포인터 사용이 MSDN 문서에 충돌 원인으로 명시적으로 언급되어 있다는 점입니다:

Failing to properly terminate the array with a NULL pointer will cause a crash.
HttpOpenRequest function (Windows)
  • msdn.microsoft.com
Creates an HTTP request handle. Syntax Parameters hConnect [in] lpszVerb [in] A pointer to a null-terminated string that contains the HTTP verb to use in the request. If this parameter is NULL, the function uses GET as the HTTP verb. lpszObjectName [in] A pointer to a null-terminated string that contains the name of the target object of the...
 

내 프로필에서 제품에 대한 보고서를 받으려고 하는데 받을 수 없는데 제가 뭘 잘못하고 있는 건가요?