模拟浏览器发送HTTP请求的两个函数(VC/VB)

#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 );
}
 
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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值