#include
<
afxwin.h
>
#include < stdio.h >
#include < windows.h >
#include " Wininet.h "
#pragma comment(lib,"Wininet.lib")
// 模拟浏览器发送HTTP请求函数
CString HttpRequest( char * lpHostName, short sPort, char * lpUrl, char * lpMethod, char * lpPostData, int nPostDataLen)
{
HINTERNET hInternet,hConnect,hRequest;
BOOL bRet;CString strResponse;
hInternet = InternetOpen( " User-Agent " ,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL, 0 );
if ( ! hInternet)
goto Ret0;
hConnect = InternetConnect(hInternet,lpHostName,sPort,NULL, " HTTP/1.1 " ,INTERNET_SERVICE_HTTP, 0 , 0 );
if ( ! hConnect)
goto Ret0;
hRequest = HttpOpenRequest(hConnect,lpMethod,lpUrl, " HTTP/1.1 " ,NULL,NULL,INTERNET_FLAG_RELOAD, 0 );
if ( ! hRequest)
goto Ret0;
// bRet = HttpAddRequestHeaders(hRequest,"Content-Type: application/x-www-form-urlencoded",Len(FORMHEADERS),HTTP_ADDREQ_FLAG_REPLACE | HTTP_ADDREQ_FLAG_ADD);
// if(!bRet)
// goto Ret0;
bRet = HttpSendRequest(hRequest,NULL, 0 ,lpPostData,nPostDataLen);
while (TRUE)
{
char cReadBuffer[ 4096 ];
unsigned long lNumberOfBytesRead;
bRet = InternetReadFile(hRequest,cReadBuffer, sizeof (cReadBuffer) - 1 , & lNumberOfBytesRead);
if ( ! bRet || ! lNumberOfBytesRead)
break ;
cReadBuffer[lNumberOfBytesRead] = 0 ;
strResponse = strResponse + cReadBuffer;
}
Ret0:
if (hRequest)
InternetCloseHandle(hRequest);
if (hConnect)
InternetCloseHandle(hConnect);
if (hInternet)
InternetCloseHandle(hInternet);
return strResponse;
}
void main()
{
// CString strResponse = HttpRequest("translate.google.com",80,"/translate_t?langpair=en|zh-CN","POST","hl=zh-CN&ie=UTF-8&text=this is me&langpair=en|zh-CN",strlen("hl=zh-CN&ie=UTF-8&text=this is me&langpair=en|zh-CN"));
CString strResponse = HttpRequest( " www.hao123.com " , 80 ,NULL, " GET " ,NULL, 0 );
FILE * fp = fopen( " C:/123.htm " , " wb " );
fwrite(strResponse,strResponse.GetLength(), 1 ,fp);
fclose(fp);
::MessageBox(NULL,strResponse, " 123 " , 0 );
}
#include < stdio.h >
#include < windows.h >
#include " Wininet.h "
#pragma comment(lib,"Wininet.lib")
// 模拟浏览器发送HTTP请求函数
CString HttpRequest( char * lpHostName, short sPort, char * lpUrl, char * lpMethod, char * lpPostData, int nPostDataLen)
{
HINTERNET hInternet,hConnect,hRequest;
BOOL bRet;CString strResponse;
hInternet = InternetOpen( " User-Agent " ,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL, 0 );
if ( ! hInternet)
goto Ret0;
hConnect = InternetConnect(hInternet,lpHostName,sPort,NULL, " HTTP/1.1 " ,INTERNET_SERVICE_HTTP, 0 , 0 );
if ( ! hConnect)
goto Ret0;
hRequest = HttpOpenRequest(hConnect,lpMethod,lpUrl, " HTTP/1.1 " ,NULL,NULL,INTERNET_FLAG_RELOAD, 0 );
if ( ! hRequest)
goto Ret0;
// bRet = HttpAddRequestHeaders(hRequest,"Content-Type: application/x-www-form-urlencoded",Len(FORMHEADERS),HTTP_ADDREQ_FLAG_REPLACE | HTTP_ADDREQ_FLAG_ADD);
// if(!bRet)
// goto Ret0;
bRet = HttpSendRequest(hRequest,NULL, 0 ,lpPostData,nPostDataLen);
while (TRUE)
{
char cReadBuffer[ 4096 ];
unsigned long lNumberOfBytesRead;
bRet = InternetReadFile(hRequest,cReadBuffer, sizeof (cReadBuffer) - 1 , & lNumberOfBytesRead);
if ( ! bRet || ! lNumberOfBytesRead)
break ;
cReadBuffer[lNumberOfBytesRead] = 0 ;
strResponse = strResponse + cReadBuffer;
}
Ret0:
if (hRequest)
InternetCloseHandle(hRequest);
if (hConnect)
InternetCloseHandle(hConnect);
if (hInternet)
InternetCloseHandle(hInternet);
return strResponse;
}
void main()
{
// CString strResponse = HttpRequest("translate.google.com",80,"/translate_t?langpair=en|zh-CN","POST","hl=zh-CN&ie=UTF-8&text=this is me&langpair=en|zh-CN",strlen("hl=zh-CN&ie=UTF-8&text=this is me&langpair=en|zh-CN"));
CString strResponse = HttpRequest( " www.hao123.com " , 80 ,NULL, " GET " ,NULL, 0 );
FILE * fp = fopen( " C:/123.htm " , " wb " );
fwrite(strResponse,strResponse.GetLength(), 1 ,fp);
fclose(fp);
::MessageBox(NULL,strResponse, " 123 " , 0 );
}
Option
Explicit
Public Declare Function InternetOpen Lib " wininet.dll " Alias " InternetOpenA " ( ByVal sAgent As String , ByVal lAccessType As Long , ByVal sProxyName As String , ByVal sProxyBypass As String , ByVal lFlags As Long ) As Long
Public Declare Function InternetCloseHandle Lib " wininet.dll " ( ByVal hInternetHandle As Long ) As Boolean
Public Declare Function InternetConnect Lib " wininet.dll " Alias " InternetConnectA " ( ByVal hInternetSession As Long , ByVal lpszServerName As String , ByVal nProxyPort As Integer , ByVal lpszUsername As String , ByVal lpszPassword As String , ByVal dwService As Long , ByVal dwFlags As Long , ByVal dwContext As Long ) As Long
Public Declare Function HttpOpenRequest Lib " wininet.dll " Alias " HttpOpenRequestA " ( ByVal hInternetSession As Long , ByVal lpszVerb As String , ByVal lpszObjectName As String , ByVal lpszVersion As String , ByVal lpszReferer As String , ByVal lpszAcceptTypes As Long , ByVal dwFlags As Long , ByVal dwContext As Long ) As Long
Public Declare Function HttpAddRequestHeaders Lib " wininet.dll " Alias " HttpAddRequestHeadersA " ( ByVal hHttpRequest As Long , ByVal sHeaders As String , ByVal lHeadersLength As Long , ByVal lModifiers As Long ) As Integer
Public Declare Function HttpSendRequest Lib " wininet.dll " Alias " HttpSendRequestA " ( ByVal hHttpRequest As Long , ByVal sHeaders As String , ByVal lHeadersLength As Long , ByVal sOptional As String , ByVal lOptionalLength As Long ) As Boolean
Public Declare Function InternetReadFile Lib " wininet.dll " ( ByVal hFile As Long , ByVal sBuffer As String , ByVal lNumBytesToRead As Long , lNumberOfBytesRead As Long ) As Integer
Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Public Const INTERNET_DEFAULT_HTTP_PORT = 80
Public Const INTERNET_SERVICE_HTTP = 3
Public Const INTERNET_FLAG_RELOAD = & H80000000
Public Const HTTP_ADDREQ_FLAG_REPLACE = & H80000000
Public Const HTTP_ADDREQ_FLAG_ADD = & H20000000
' 模拟浏览器发送HTTP请求协议函数
Function HttpRequest(strHostName As String , intPort As Integer , strUrl As String , strMethod As String , strPostData As String , ByVal lngPostDataLen As Long ) As String
Dim hInternet As Long , hConnect As Long , hRequest As Long
Dim strBuffer As String , lngNumberOfBytesRead As Long , strResponse As String
Dim blnRet As Boolean
HttpRequest = "" ' 初始化函数返回值
' 打开一个Session会话
hInternet = InternetOpen( " MyAgent " , INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0 )
If hInternet = 0 Then
MsgBox " hInternetOpen函数调用失败! "
GoTo Ret0
End If
' 连接服务器
hConnect = InternetConnect(hInternet, strHostName, intPort, vbNullString, " HTTP/1.1 " , INTERNET_SERVICE_HTTP, 0 , 0 )
If hConnect = 0 Then
MsgBox " InternetConnect函数调用失败! "
GoTo Ret0
End If
' 创建一个请求
hRequest = HttpOpenRequest(hConnect, strMethod, strUrl, " HTTP/1.1 " , vbNullString, 0 , INTERNET_FLAG_RELOAD, 0 )
If hRequest = 0 Then
MsgBox " HttpOpenRequest函数调用失败! "
GoTo Ret0
End If
blnRet = HttpSendRequest(hRequest, vbNullString, 0 , strPostData, lngPostDataLen)
If blnRet = False Then
MsgBox " HttpSendRequest函数调用失败! "
GoTo Ret0
End If
Do While True
strBuffer = String ( 4096 , 0 )
blnRet = InternetReadFile(hRequest, strBuffer, Len (strBuffer), lngNumberOfBytesRead)
strResponse = strResponse & Left (strBuffer, lngNumberOfBytesRead)
If blnRet = False Or Not CBool (lngNumberOfBytesRead) Then Exit Do
Loop
Ret0:
If hRequest Then Call InternetCloseHandle(hRequest)
If hConnect Then Call InternetCloseHandle(hConnect)
If hInternet Then Call InternetCloseHandle(hInternet)
HttpRequest = strResponse
End Function
Public Declare Function InternetOpen Lib " wininet.dll " Alias " InternetOpenA " ( ByVal sAgent As String , ByVal lAccessType As Long , ByVal sProxyName As String , ByVal sProxyBypass As String , ByVal lFlags As Long ) As Long
Public Declare Function InternetCloseHandle Lib " wininet.dll " ( ByVal hInternetHandle As Long ) As Boolean
Public Declare Function InternetConnect Lib " wininet.dll " Alias " InternetConnectA " ( ByVal hInternetSession As Long , ByVal lpszServerName As String , ByVal nProxyPort As Integer , ByVal lpszUsername As String , ByVal lpszPassword As String , ByVal dwService As Long , ByVal dwFlags As Long , ByVal dwContext As Long ) As Long
Public Declare Function HttpOpenRequest Lib " wininet.dll " Alias " HttpOpenRequestA " ( ByVal hInternetSession As Long , ByVal lpszVerb As String , ByVal lpszObjectName As String , ByVal lpszVersion As String , ByVal lpszReferer As String , ByVal lpszAcceptTypes As Long , ByVal dwFlags As Long , ByVal dwContext As Long ) As Long
Public Declare Function HttpAddRequestHeaders Lib " wininet.dll " Alias " HttpAddRequestHeadersA " ( ByVal hHttpRequest As Long , ByVal sHeaders As String , ByVal lHeadersLength As Long , ByVal lModifiers As Long ) As Integer
Public Declare Function HttpSendRequest Lib " wininet.dll " Alias " HttpSendRequestA " ( ByVal hHttpRequest As Long , ByVal sHeaders As String , ByVal lHeadersLength As Long , ByVal sOptional As String , ByVal lOptionalLength As Long ) As Boolean
Public Declare Function InternetReadFile Lib " wininet.dll " ( ByVal hFile As Long , ByVal sBuffer As String , ByVal lNumBytesToRead As Long , lNumberOfBytesRead As Long ) As Integer
Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Public Const INTERNET_DEFAULT_HTTP_PORT = 80
Public Const INTERNET_SERVICE_HTTP = 3
Public Const INTERNET_FLAG_RELOAD = & H80000000
Public Const HTTP_ADDREQ_FLAG_REPLACE = & H80000000
Public Const HTTP_ADDREQ_FLAG_ADD = & H20000000
' 模拟浏览器发送HTTP请求协议函数
Function HttpRequest(strHostName As String , intPort As Integer , strUrl As String , strMethod As String , strPostData As String , ByVal lngPostDataLen As Long ) As String
Dim hInternet As Long , hConnect As Long , hRequest As Long
Dim strBuffer As String , lngNumberOfBytesRead As Long , strResponse As String
Dim blnRet As Boolean
HttpRequest = "" ' 初始化函数返回值
' 打开一个Session会话
hInternet = InternetOpen( " MyAgent " , INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0 )
If hInternet = 0 Then
MsgBox " hInternetOpen函数调用失败! "
GoTo Ret0
End If
' 连接服务器
hConnect = InternetConnect(hInternet, strHostName, intPort, vbNullString, " HTTP/1.1 " , INTERNET_SERVICE_HTTP, 0 , 0 )
If hConnect = 0 Then
MsgBox " InternetConnect函数调用失败! "
GoTo Ret0
End If
' 创建一个请求
hRequest = HttpOpenRequest(hConnect, strMethod, strUrl, " HTTP/1.1 " , vbNullString, 0 , INTERNET_FLAG_RELOAD, 0 )
If hRequest = 0 Then
MsgBox " HttpOpenRequest函数调用失败! "
GoTo Ret0
End If
blnRet = HttpSendRequest(hRequest, vbNullString, 0 , strPostData, lngPostDataLen)
If blnRet = False Then
MsgBox " HttpSendRequest函数调用失败! "
GoTo Ret0
End If
Do While True
strBuffer = String ( 4096 , 0 )
blnRet = InternetReadFile(hRequest, strBuffer, Len (strBuffer), lngNumberOfBytesRead)
strResponse = strResponse & Left (strBuffer, lngNumberOfBytesRead)
If blnRet = False Or Not CBool (lngNumberOfBytesRead) Then Exit Do
Loop
Ret0:
If hRequest Then Call InternetCloseHandle(hRequest)
If hConnect Then Call InternetCloseHandle(hConnect)
If hInternet Then Call InternetCloseHandle(hInternet)
HttpRequest = strResponse
End Function