C++登陆Web的例子

用了MFC的CInternetSession,CHTTPFile和CHTTPConnection类。


#include <afxinet.h>
#include <afxsock.h>
#include <afxstr.h>
#include <iostream>

using namespace std;

int HttpCall(CString ServerAddress,
             int ServerPort,
             CString Process,
             CString Query,
             CString DataBlock,
             CString &DataOut)
{
    CInternetSession* pHttpSession = new CInternetSession("HttpClient");

    CString URL = "http://" + ServerAddress;
    CString CookieData;
    pHttpSession->GetCookie(URL, "", CookieData);
    if(CookieData.GetLength() == 0)
    {
        pHttpSession->SetCookie(URL, "Language", "en");
    }

    CHttpConnection* pHttpConnection = pHttpSession->GetHttpConnection(ServerAddress, ServerPort, "", "");
    CHttpFile* pHttpFile = NULL;

    if(Query.GetLength()>0)
    {
        Process += '?' + Query;
    }

    TRY
    {
        DWORD HttpRequestFlags = INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE;
        DWORD TotalLen = DataBlock.GetLength();
        if( TotalLen > 0)
        {
            pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,
                Process, NULL, 1, NULL, (LPCTSTR)"1.1", HttpRequestFlags);
        }
        else
        {
            pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET,
                Process, NULL, 1, NULL, (LPCTSTR)"1.1", HttpRequestFlags);
        }
        // Use direct write to posting field!
        CString strHeaders = "Accept: text/*\r\n";
        strHeaders += "User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; U; Edition IBIS; zh-cn) Presto/2.10.229 Version/11.64\r\n";
        strHeaders += "Accept-Language: en-us\r\n";
        strHeaders += "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n";

        pHttpFile->AddRequestHeaders((LPCSTR)strHeaders);

        if(TotalLen>0)
        {
            pHttpFile->SendRequestEx(TotalLen, HSR_INITIATE, 1);
            pHttpFile->WriteString((LPCTSTR)DataBlock);
            pHttpFile->EndRequest();
        }
        else
        {
            pHttpFile->SendRequest();
        }
    }
    CATCH_ALL(e)
    {
        AfxMessageBox("Connection to Server Failed");
    }
    END_CATCH_ALL
        DWORD dwRet;
    pHttpFile->QueryInfoStatusCode(dwRet);

    // Read Data
    DWORD lread = 1000;
    char c[1000] = {0};
    while(lread > 0)
    {
        lread = pHttpFile->Read( c , 1000);
        if(lread > 0)
        {
            DataOut += c;
        }
    }

    pHttpFile->Close();
    pHttpConnection->Close();
    pHttpSession->Close();
    delete pHttpFile;
    delete pHttpConnection;
    delete pHttpSession;
    return dwRet;
}



int main(int argc, char **argv)
{
    CString DataOut = "";

    HttpCall("192.168.1.1", 80, "/index/login.cgi", "", "Username=admin&Password=YWRtaW4%3D", DataOut);
    cout << DataOut << endl;
    system("pause");

    DataOut = "";
    HttpCall("192.168.1.1", 80, "/html/application/setcfg.cgi",
        "x=InternetGatewayDevice.WANDevice.2.WANConnectionDevice.1.WANIPConnection.1.X_DMZ&RequestFile=/html/application/dmz.asp", 
        "x.DMZEnable=true&x.DMZHostIPAddress=192.168.1.123", DataOut);
    cout << DataOut << endl;
    system("pause");

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值