CInternetSession的简单使用

1. CInternetSession的简单使用

CInternetSession session;

CHttpFile *file = NULL;

CString strURL = " https://www.baidu.com"; //最新百度请求页面

CString strHtml = "”;   //存放打开的页面返回数据

try{

file = (CHttpFile*)session.OpenURL(strURL);

}catch(CInternetException * m_pException){

CString strInfo; strInfo.Format(_T("CInternetException ErrorCode = %ld"),m_pException->m_dwError);

file = NULL;

m_pException->Delete();

session.Close();

MessageBox(strInfo);

}

CString strLine;

if(file != NULL){

while(file->ReadString(strLine) != NULL){

strHtml += strLine;

}

}else{

MessageBox("file is null!");

}

MessageBox(strHtml );
//弹出看我们请求百度倒底返回的是什么哈

session.Close();

file->Close();

delete file;

file = NULL;

2. CInternetSession的代理与超时使用

CInternetSession session;

CHttpFile *file = NULL;

INTERNET_PROXY_INFO proxyinfo;

proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;

proxyinfo.lpszProxy ="10.88.1.101:8080";

proxyinfo.lpszProxyBypass = NULL;

session.SetOption(INTERNET_OPTION_PROXY,(LPVOID)&proxyinfo,

sizeof(INTERNET_PROXY_INFO));

session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 5000);      // 5秒的连接超时

session.SetOption(INTERNET_OPTION_SEND_TIMEOUT, 1000);           // 1秒的发送超时

session.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT, 7000);        // 7秒的接收超时

session.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT, 1000);     // 1秒的发送超时

session.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 7000);       // 7秒的接收超时

session.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1);          // 1次重试

try{

file = (CHttpFile*)session.OpenURL("http://10.88.1.101:8080/kmcs",1,

INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_RELOAD|INTERNET_FLAG_DONT_CACHE);

}catch(CInternetException * m_pException){

CString strInfo; strInfo.Format(_T("CInternetException
ErrorCode = %ld"),m_pException->m_dwError);

file = NULL;

m_pException->Delete();

session.Close();

MessageBox(strInfo);

return;

}

CString strLine;

if(file != NULL){

while(file->ReadString(strLine) != NULL){

MessageBox(strLine);

}

}else{

MessageBox("file is null!");

}

file->Close();

session.Close();

delete file;

file = NULL;

3. CInternetSession的POST使用

CString sSendUrl;

sSendUrl.Format(_T("&operate=save&layers=%s&addType=1&fields=%s&fieldValues=%s%d&geometry=%s"),sTXTabName,sFieldComoBox,CArrayYWDATAInfo.at(nIndex-1),nIndex,sValueZB);

CLog::Out("转码前的请求操作:" + sSendUrl +"\r\n");

CInternetSession m_InetSession(_T("session"),

0,

INTERNET_OPEN_TYPE_PRECONFIG,

NULL,

NULL,

INTERNET_FLAG_DONT_CACHE);//设置不缓冲

CHttpConnection* pServer = NULL;//取得HTTP服务连接

CHttpFile* pFile = NULL;//取得读取HTTP文件连接等

CString strHtml = "";//GET返回的数据

CString strRequest = sSendUrl+"\r\n";//POST过去的数据.

CString strHeaders = "Content-Type:application/x-www-form-urlencoded";//发送服务器头数据.

//将发送的数据进行转码操作,有点操蛋……

string str;

strCoding::GB2312ToUTF_8(str,strRequest.GetBuffer(0),strRequest.GetLength());

strRequest = str.c_str();

CLog::Out("转码后的请求操作:" + strRequest + "\r\n");

try{

CString sPort = "";

CString sIP   = "";

CString sUrl  = "";

GetGraphServicesConfig(sIP,sPort,sUrl);

CLog::Out("请求的URL: http://" + sIP + ":" + sPort +"/" + sUrl);

INTERNET_PORT nPort=atol(sPort.GetBuffer(0)); //端口.

pServer = m_InetSession.GetHttpConnection(sIP, nPort);

pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,sUrl);

pFile->AddRequestHeaders(strHeaders);

strHeaders = "CharSet:utf-8";

pFile->AddRequestHeaders(strHeaders);

pFile->SendRequestEx(strRequest.GetLength());

pFile->WriteString(strRequest);

pFile->EndRequest();

DWORD dwRet;

pFile->QueryInfoStatusCode(dwRet);

if (dwRet == HTTP_STATUS_OK)

{

CString strLine;

while (pFile->ReadString(strLine))

strHtml += strLine;

//入库成功返回的结果JSON样式:{"message":"入库成功","ID":81,"command":"success"}

//入库失败返回的结果JSON样式:{"message":"sr图形参数为空或异常。","command":"error"}

//入库结果转码,将UTF8转成GB2312.

try

{

UrlCode url;

char destBuffer[256]={0};

url.URL_UTF8_Decode(strHtml.GetBuffer(0),destBuffer);

strHtml=destBuffer;

strHtml.TrimLeft("{");

strHtml.TrimRight("}");

strHtml.Replace("\"","");

}

catch(...)

{

CLog::Out("转码异常了,可能是图形服务端返回值乱码了\r\n");

}

CLog::Out("返回结果:" + strHtml + "\r\n");

//入库成功

if((strHtml.Find(_T("command:success")) != -1) && (strHtml.Find(_T("message:入库成功")) != -1))

{

sPlit.SetString(strHtml,_T(","));

for (int n = 0 ; n < sPlit.GetCount() ; ++n)

{

CSplitString splitStr;

splitStr.SetString(sPlit.GetString(n),":");

CString id = splitStr.GetString(0);

if(id.CompareNoCase("ID") ==0)

{

//存储已经成功能入图形库的地块的OBJECTID

CArrayLandID.push_back(make_pair(splitStr.GetString(1),it->second));

//将已成功入图形库的OBJECTID更到地块表d_kc的OBJECTID字段上,将业务库地块数据与图形库入库表建立对应关系

miniAdo* pAdo = lpReqInfo->GetAdoConn();

if (pAdo != NULL)

{

CString sSql;

sSql.Format(_T("update d_kc set objectid=%d where kcdjcg2=‘%s‘"),atol(splitStr.GetString(1)),it->second);

CLog::Out(sSql+"\r\n");

try

{

pAdo->BeginTrans();

pAdo->Execute(sSql);

pAdo->CommitTrans();

}

catch(...)

{

pAdo->RollbackTrans();

CLog::Out("执行:"+sSql+"异常!");

}

lpReqInfo->RelAdoConn(pAdo);

pAdo = NULL;

}

break;

}

}

}

else if(strHtml.Find(_T("command:error")) != -1) //图形入库失败

{

bFlag = TRUE;

CLog::Out(_T("---------------------执行图形入库操作失败,将执行回滚操作!--------------------------"));

for (vector<pr>::iterator it_ = CArrayLandID.begin() ; it_ != CArrayLandID.end() ; ++it_)

{

GraphDelete(sZBPKValue,it_->second,sTXTabName,it_->first);

}

}

else

{

CLog::Out("........................................................");

CLog::Out("--------------------执行到了,不可能执行到的地方------------------");

CLog::Out("........................................................");

bFlag=TRUE;

}

}

else

{

lpReqInfo->sRespond.Format(_T("调用图形接口入库异常,异常信息是==>HTTP:%ld\r\n"),dwRet),bFlag = TRUE;

CLog::Out(lpReqInfo->sRespond);

}

delete pFile;pFile = NULL;

delete pServer;pServer = NULL;

}

catch (CInternetException* e){

e->m_dwContext;

CLog::Out("执行HTTP Request进异常!");

bFlag=TRUE;

}

时间: 2024-12-31 03:31:09

CInternetSession的简单使用的相关文章

MFC抓取网页代码简单版。

最近又在网上找了一些有关MFC抓取网页代码的文章看,发现有个比较简单的代码,和大家分享下. CInternetSession session(NULL, 0); CHttpFile* htmlFile = NULL; CString strLine, strHtml; CString url = _T("http://www.tqyb.com.cn/data/gzWeather/gz_weatherForecastInDays.js?"); TCHAR sRecv[1024]; UIN

C# Ping 简单使用

编程过程中,有时候需要判断主机是否在线,最简单的方法就是使用Windows的Ping命令看看能否ping通.看到网上很多文章,说用C#去调用windows的ping.exe,然后解析返回的字符串.我觉得这种方式太麻烦了,就做一下简单判断,不想弄那么麻烦. 查了一下,C#专门提供了一个Ping类,与Windows下的ping命令类似: 命令空间: System.Net.NetworkInformation; 使用方法: bool online = false; //是否在线 Ping ping =

自动生成简单四则运算的C语言程序

该程序是在博客园里面找的,具体是谁的找了半天没找到,无法提供它原本的链接.由于自己写的过于简单,且有一些功能暂时无法实现,所以就找了一个来应付作业,望原谅.在这个程序的源码中我改了一个错误的地方,源码中有这样一个随机数发生器的初始化函数的语句:"srand((unsigned)time(NULL))".srand函数是随机数发生器的初始化函数.但是正确的写法应该是:srand(unsigned( time(NULL))):为了防止随机数每次重复,常常使用系统时间来初始化,即使用time

Mysql的锁机制与PHP文件锁处理高并发简单思路

以购买商品举例: ① 从数据库获取库存的数量. ② 检查一下库存的数量是否充足. ③ 库存的数量减去买家购买的数量(以每个用户购买一个为例). ④ 最后完成购买. 仅仅这几行逻辑代码在并发的情况下会出现问题,自己可以想象一下. 这里暂时就不测试了,下面会针对并发的处理给出测试结果. 创建表: CREATE TABLE `warehouse` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `stock` int(11) NOT NULL

Winfrom 简单的安卓手机屏幕获取和安卓简单操作

为啥我要做这个东西了,是因为经常要用投影演示app ,现在有很多这样的软件可以把手机界面投到电脑上 ,但都要安装,比如说360的手机助手,我又讨厌安装,于是就自己捣鼓了下 做了这个东西, 实现了以下简单功能   1.屏幕获取(因为是截图方式获取的,所以有点卡顿) 2.实现点击功能,并在点击的时候出现一个手势图标,方便用户观看 3.实现简单的滑动功能 4.实现在界面上画图功能 5.实现拖拽安装apk功能 操作说明:鼠标左边 模拟手机点击,中键停止/开始刷新界面(画图的时候不能刷新),右键去掉画图内

iOS instruments之ui automation的简单使用(高手绕道)

最近使用了几次instruments中的automation工具,现记录下automation的简单使用方法,希望对没接触过自动化测试又有需求的人有所帮助.  UI 自动测试是iOS 中重要的附加功能,它由名为"Automation"的新的工具对象支持.Automation工具的脚本是用JavaScript语言编写,主要用于分析应用的性能和用户行为,模仿/击发被请求的事件,利用它可以完成对被测应用的简单的UI测试及相关功能测试. 一. 简单的录制脚本 打开xcode,这里用我为我家亲爱

Android ExpandableListView 带有Checkbox的简单应用

expandablelistview2_groups.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height=&qu

Android ExpandableListView的简单应用

Expandablelistview1Activity.java package com.wangzhu.demoexpandablelistview; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.widg

一个简单的主机管理模拟程序

最近写的一个小练习,主要是把前面学的东西整合一下.写了一个简单的主机管理界面,主要是练习以下知识点: Session和Cookie进行登录验证(装饰器) 数据库的基本操作 (单表,1对多,多对多) Form的简单使用实现验证 Bootstrap模板写个简单界面 自定义分页 信号,中间件,CSRF,模板语言,JavaScript,AJAX等等 界面比较low,毕竟不是专业的. 附件里面是Django的源代码,3个文件放在一起winrar解压就可以打开