недавно заметил вот такое дело, что при коннекте юзая WinInetAPI даже после использования InternetCloseHandle система фактически не закрывает соеденение, а закрывает его по истечении 1 минуты ровно (у меня).... Смотрел через файр (OutpostFirewall)...соеденение висит.. не смертельно, но интересно... вопросТорможу я? Кого винить (коли не себя)? И что сделать чтобы закрывало сразу? код тестовый приложен ниже. | Код | #include "stdafx.h"
#pragma comment(lib, "wininet.lib")
#define __HTTP_VERB_GET "GET" #define __HTTP_ACCEPT_TYPE "*/*" #define __HTTP_ACCEPT "Accept: */*\r\n"
#define _DEFAULT_AGENT_ "Mozilla/4.0 (compatible; )"
int _tmain(int argc, _TCHAR* argv[]) { const char* szAgent=_DEFAULT_AGENT_; HINTERNET _hOpen=::InternetOpen( szAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if(!_hOpen)OutputDebugString("_hOpen is NULL");
DWORD port = 443; //https port by default (!) const char sza[]="www.blablabla.ru"; const char szUser[]=""; const char szPassword[]=""; HINTERNET _hConnection = ::InternetConnect( _hOpen, sza, //address port, szUser, szPassword, INTERNET_SERVICE_HTTP, 0, NULL); if(!_hConnection || _hConnection==INVALID_HANDLE_VALUE ||::InternetAttemptConnect(NULL)!=ERROR_SUCCESS)OutputDebugString("_hConnection is NULL or some else_)"); const char szuri[]="/webstat/do"; const char *szAcceptType= __HTTP_ACCEPT_TYPE;
HINTERNET _hRequest=::HttpOpenRequest( _hConnection, __HTTP_VERB_GET, // HTTP Verb (GET or POST) szuri, // Object Name HTTP_VERSION, // Version 0, // Reference (LPCSTR*)&szAcceptType, // Accept Type INTERNET_FLAG_PRAGMA_NOCACHE| INTERNET_FLAG_RELOAD| INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_FORMS_SUBMIT | INTERNET_FLAG_SECURE, NULL); // context call-back point if(!_hRequest || _hRequest==INVALID_HANDLE_VALUE)OutputDebugString("_hRequest bad..."); // REPLACE HEADER if(!::HttpAddRequestHeaders( _hRequest,__HTTP_ACCEPT, strlen(__HTTP_ACCEPT),HTTP_ADDREQ_FLAG_REPLACE))OutputDebugString("additional header failed...");
//INsecure connect! DWORD sbufsize=4; DWORD sbuf=0; InternetQueryOption(_hRequest,INTERNET_OPTION_SECURITY_FLAGS,&sbuf,&sbufsize); sbuf|=SECURITY_FLAG_IGNORE_UNKNOWN_CA|SECURITY_FLAG_IGNORE_CERT_CN_INVALID |SECURITY_FLAG_IGNORE_CERT_DATE_INVALID; InternetSetOption (_hRequest,INTERNET_OPTION_SECURITY_FLAGS,&sbuf,sbufsize);
LPCTSTR szContentType="Content-Type: application/x-www-form-urlencoded\r\n"; // SEND REQUEST if(!::HttpSendRequest( _hRequest, // handle by returned HttpOpenRequest szContentType, // additional HTTP header strlen(szContentType), // additional HTTP header length (LPVOID)NULL, // additional data in HTTP Post or HTTP Put 0) // additional data length && ::GetLastError()!=12168)OutputDebugString("Main requet failed ?..."); if(_hRequest) InternetCloseHandle(_hRequest); if(_hConnection) InternetCloseHandle(_hConnection); if(_hOpen) InternetCloseHandle(_hOpen);
system("PAUSE"); //висим тут и смотрим.. return 0; }
|
--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
|