我这里有一段程序,用来在一个对话框里显示出一次http request的原始信息,不过使用Inet API做的

我这里有一段程序,用来在一个对话框里显示出一次http     request的原始信息,不过使用Inet     API做的,希望能有帮助。   
    
    void     CHTTPRequestDlg::OnButtonRequest()     
    {   
    UpdateData(TRUE);   
    HINTERNET     hInternet     =     InternetOpen("Mozilla/4.0     (compatible;     MSIE     5.0;     Windows     NT     5.0)",     INTERNET_OPEN_TYPE_DIRECT,   
    NULL,     NULL,     NULL);   
    HINTERNET     hSession     =     InternetConnect(hInternet,     m_strHost,   
    m_nPort,     "username",     "password",   
    INTERNET_SERVICE_HTTP,     0,     0);   
    char*     szAccept[]     =     {"*/*",     NULL};   
    CString     strVerb;   
    m_comboVerb.GetWindowText(strVerb);   
    HINTERNET     hRequest     =     HttpOpenRequest(hSession,     strVerb,     m_strObject,     NULL,     NULL,     (LPCSTR*)szAccept,     0,     0);   
    struct   
    {   
    char*     Language;   
    char*     Encoding;   
    char*     ContentType;   
    }Headers     =     {"Accept-Language:     zh-cn/r/n",   
                    "Accept-Encoding:     gzip,     deflate/r/n",   
    "Content-Type:     application/x-www-form-urlencoded/r/n"};   
    
    if(m_bLanguage)   
    HttpAddRequestHeaders(hRequest,     Headers.Language,           -1,     HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);   
    if(m_bEncoding)   
    HttpAddRequestHeaders(hRequest,     Headers.Encoding,           -1,     HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);   
    if(m_bContentType)   
    HttpAddRequestHeaders(hRequest,     Headers.ContentType,     -1,     HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);   
    LPCSTR     lpAddHeader     =     NULL,     lpContent     =     NULL;   
    if(m_strHeaders.GetLength())   
    {   
    if(m_strHeaders.Right(2)     !=     "/r/n")   
    m_strHeaders     +=     "/r/n";   
    lpAddHeader     =     (LPCSTR)m_strHeaders;   
    }   
    if(m_strContent.GetLength()     &&     (strVerb     ==     "POST"     ||     strVerb     ==     "PUT"))   
    lpContent     =     (LPCSTR)m_strContent;   
    HttpSendRequest(hRequest,     lpAddHeader,     -1,     (LPVOID)lpContent,     m_strContent.GetLength());   
    
    m_editContentGot.SetSel(0,     -1);   
    m_editContentGot.ReplaceSel("");   
    
    
    LPSTR             lpszData; //     buffer     for     the     data   
    DWORD             dwSize;                                 //     size     of     the     data     available   
    DWORD             dwDownloaded; //     size     of     the     downloaded     data   
    
    //     Set     the     cursor     to     an     hourglass.   
    SetCursor(LoadCursor(NULL,IDC_WAIT));   
    
    //     This     loop     handles     reading     the     data.       
    while(1)   
    {   
    //     The     call     to     InternetQueryDataAvailable     determines     the     amount     of     
    //     data     available     to     download.   
    if     (!InternetQueryDataAvailable(hRequest,&dwSize,0,0))   
    {   
    SetCursor(LoadCursor(NULL,IDC_ARROW));   
    break;   
    }   
    else   
    {             
    //     Allocates     a     buffer     of     the     size     returned     by     InternetQueryDataAvailable   
    lpszData     =     new     char[dwSize+1];   
    
    //     Reads     the     data     from     the     HINTERNET     handle.   
    if(!InternetReadFile(hRequest,(LPVOID)lpszData,dwSize,&dwDownloaded))   
    {   
    delete[]     lpszData;   
    break;   
    }   
    else   
    {   
    //     Adds     a     null     terminator     to     the     end     of     the     data     buffer   
    lpszData[dwDownloaded]='/0';   
    
    int     nLen     =     m_editContentGot.GetWindowTextLength();   
    m_editContentGot.SetSel(nLen-1,     nLen-1);   
    m_editContentGot.ReplaceSel(lpszData);   
    
    //     Delete     the     two     buffers   
    delete[]     lpszData;   
    
    //     Check     the     size     of     the     remaining     data.       If     it     is     zero,     break.   
    if     (dwDownloaded     ==     0)   
    break;   
    }   
    }   
    }   
    
    //     Close     the     HINTERNET     handle   
    InternetCloseHandle(hRequest);   
    InternetCloseHandle(hSession);   
    InternetCloseHandle(hInternet);   
    
    //     Set     the     cursor     back     to     an     arrow   
    SetCursor(LoadCursor(NULL,IDC_ARROW));   
    }   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
此示例演示在 Internet Explorer 4.0 WinInet.dll 中引入并记录在 Internet 客户端 SDK 中的 HttpSendRequestEx 函数的正确用法。 原始HttpSendRequest 函数有这样一个重大限制: 所有请求的数据都有一个缓冲区时调用该函数时将提供。这是通常不方便、 导致在某些客户端应用程序中,性能较差,可能会无法上载大量数据从客户端计算机使用有限的内存。新的 HttpSendRequestEx 函数允许启动请求,发送数据分小段为可用,然后结束后已发送的所有数据的请求的程序。为了使此函数以处理计算机上必须安装 Internet Explorer 4.0。下列文件已可从 Microsoft 下载中心下载: Hsrex.exe 有关如何下载 Microsoft 支持文件的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 119591 如何从在线服务获得 Microsoft 支持文件微软已对此文件进行病毒扫描。Microsoft 使用该文件投递日期时可用的最新的病毒检测软件。该文件存储在安全增强型服务器上,以防止对文件进行任何未经授权的更改。 Hsrex.exe 是自解压的存档文件,其中包含 BigPost.cpp (演示程序代码) 和 Readall.asp,一个 Active Server Pages (ASP) 脚本将读取所有发送 POST 请求中的数据。Readall.asp 是 BigPost,可以使用 Microsoft 互联网信息服务器 (IIS) 版本的支持 ASP 作为示例目标提供。对于其他 Web 服务器,您需要提供相应的服务器脚本来读取数据。 若要编译此程序包含在 Microsoft Visual C++ 5.0,请执行以下步骤: 1.运行 Visual C++ 和创建一个新的 Win32 控制台应用程序调用"BigPost"。 2.在目录中创建项目的位置,运行 Hsrex.exe。 3.将 BigPost.cpp 添加到 BigPost 项目。 4.转到项目设置对话框中,单击链接选项卡,然后添加到 WinInet.lib"对象/库模块:"字段。 5.请确保配置 Visual C++,以便编译器和链接器将使用 Wininet.h 和 Wininet.lib 从 Internet 客户端 SDK。如果未能到这一点,将导致编译器或链接器错误。原型和 HttpSendRequestEx 的导不包含 Visual C++ 中包含的包括和库文件。 6.生成项目。它将创建 BigPost.exe。 在程序运行,如下所示: BigPost < 大小 >< 服务器 >< 路径 > 例如,以下将开机自检 1 兆字节 (1024 KB) 到 http://yourserver/scripts/ReadAll.asp: 您的服务器 /scripts/ReadAll.asp BigPost 1024

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值