18,363
社区成员




#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#include "iostream.h"
#include <wininet.h>
#pragma comment(lib, "Wininet.lib")
BOOL SendRequest(char *URL, char *CgiName, int iPort,
char *TransData, int TransDataLen,
char *RetBuffer, DWORD *pdwRetBufferSize,DWORD *pdwBytesRead)
{
printf("In SendRequest,URL:%s,CfiName:%s,Port:%d\r\n",URL,CgiName,iPort);
HINTERNET hSession=NULL;
HINTERNET hConnect=NULL;
HINTERNET hRequest=NULL;
BOOL bSendRequest=FALSE;
INT bSuccess=0;
DWORD dwErrorCode;
TransDataLen=0;
hSession=InternetOpen(0,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if (hSession!=NULL)
{
DWORD dwTimeout=4000;
BOOL b_retSetOption=InternetSetOption(hSession,INTERNET_OPTION_CONNECT_TIMEOUT,&dwTimeout,sizeof(dwTimeout));
if (!b_retSetOption)
{
dwErrorCode=GetLastError();
cout<<"GetLastError_SetOption1: "<<dwErrorCode<<endl;
goto ERRORCODE;
}
}
else
{
dwErrorCode=GetLastError();
cout<<"GetLastError_InternetOpen: "<<dwErrorCode<<endl;
goto ERRORCODE;
}
printf("In InternetConnect\r\n");
//连接服务器
hConnect=InternetConnect(hSession,URL,iPort,NULL,NULL,INTERNET_SERVICE_HTTP,0,0);
if (!hConnect)
{
dwErrorCode=GetLastError();
cout<<"GetLastError_InternetConnect: "<<dwErrorCode<<endl;
goto ERRORCODE;
}
printf("In HttpOpenRequest\r\n");
//创建一个请求
hRequest=HttpOpenRequest(hConnect,"POST",CgiName,"HTTP/1.0",NULL,NULL,0,0);
if (!hRequest)
{
dwErrorCode=GetLastError();
cout<<"GetLastError_HttpOpenRequest: "<<dwErrorCode<<endl;
goto ERRORCODE;
}
printf("In HttpSendRequest\r\n");
//发送请求
bSendRequest=HttpSendRequest(hRequest,"Content-Type: application/x-www-form-urlencoded\r\n",-1,TransData,TransDataLen);
if (!bSendRequest)
{
dwErrorCode=GetLastError();
cout<<"GetLastError_HttpSendRequest: "<<dwErrorCode<<endl;
goto ERRORCODE;
}
printf("In InternetReadFile\r\n");
//获得返回结果
if (RetBuffer&&*pdwRetBufferSize>0)
{
DWORD dwReaded=0;
char *p=RetBuffer;
DWORD dwTotalBytesRead=0;
while (TRUE)
{
Sleep(100);
p=p+dwReaded;
dwTotalBytesRead=dwTotalBytesRead+dwReaded;
if (!InternetReadFile(hRequest,p,*pdwRetBufferSize,&dwReaded))
{
dwErrorCode=GetLastError();
cout<<"GetLastError_InternetReadFile: "<<dwErrorCode<<endl;
goto ERRORCODE;
}
if (dwReaded==0)
{
break;
}
*pdwRetBufferSize=*pdwRetBufferSize-dwReaded;
}
*pdwBytesRead=dwTotalBytesRead;//返回实际读到的总字节数
}
else
{
goto ERRORCODE;
}
printf("Out InternetReadFile\r\n");
//关闭
if (hRequest)
InternetCloseHandle(hRequest);
if (hConnect)
InternetCloseHandle(hConnect);
if (hSession)
InternetCloseHandle(hSession);
return TRUE;
ERRORCODE:
printf("Error\r\n");
if (hRequest)
InternetCloseHandle(hRequest);
if (hConnect)
InternetCloseHandle(hConnect);
if (hSession)
InternetCloseHandle(hSession);
return FALSE;
}
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
char resu[1024]={0};
DWORD dwBytesRead=0;
char retBuf[1024]={0};
DWORD dwRetBufLen=1024;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
SendRequest("xxx.xxx.xxx.xxx", "xxx.asp", 80,resu, strlen(resu)+1,retBuf, &dwRetBufLen,&dwBytesRead);
}
break;
}
return TRUE;
}