检测网页是否可以打开, 再使用IE打开网页

时间:2022-09-30 17:14:17
//检测是否能连接网页
BOOL CanLinkWebPage(string strUrl)
{
/*clock_t start, finish;
double duration;
start = clock();
char buf[100];*/
//使用mfc的CHttpFile来检测
BOOL CanLink = FALSE;
CInternetSession session("HttpClient");
session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 5000); // 5000毫秒的连接超时
session.SetOption(INTERNET_OPTION_SEND_TIMEOUT, 5000); // 5000毫秒的发送超时
session.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT, 5000); // 5000毫秒的接收超时
session.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT, 5000); // 5000毫秒的发送超时
session.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 5000); // 5000毫秒的接收超时
session.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1); // 1次重试
try
{
CHttpFile* pFile = (CHttpFile*)session.OpenURL(strUrl.c_str(), 1, INTERNET_FLAG_RELOAD | INTERNET_FLAG_TRANSFER_BINARY);
DWORD dwStatusCode;
pFile-> QueryInfoStatusCode(dwStatusCode);
/*sprintf_s(buf, "%s返回状态码是:%lu", strUrl.c_str(), dwStatusCode);
UpdateDebugLogToFile(buf);*/
//200 302 206状态码都可以
if(dwStatusCode == HTTP_STATUS_OK || dwStatusCode == HTTP_STATUS_REDIRECT || dwStatusCode == HTTP_STATUS_PARTIAL_CONTENT)
CanLink = TRUE;
pFile -> Close();
delete pFile;
}
catch (CException* e)
{
e->Delete();
}
session.Close();
/*finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
sprintf_s(buf, "%s%s%f%s, CanLink值:%d", strUrl.c_str()," 连接时间: ", duration, "秒", CanLink);
UpdateDebugLogToFile(buf);*/
return CanLink;
}
//测试几个URL的速度
unsigned __stdcall TestUrlSpeed(void* _pParam)
{
string _Url;
string* _pStr = (string*)_pParam;
if (_pStr) {
_Url = *_pStr;
if(_pStr != NULL)
{
delete _pStr;
_pStr = NULL;
}
}
if(CanLinkWebPage(_Url))
return 1;
else
return 0;
}
// 打开网页
unsigned __stdcall OpenUrlUseIEThread(void* _pParam)
{
string _Url;
string* _pStr = (string*)_pParam;
if (_pStr) {
_Url = *_pStr;
SAFE_DELETE(_pStr);
}
if (!_Url.empty()) {
vector<string> _UrlList;
CVarTypeCvt::split_by(_Url,_UrlList,';');
vector<string> urls;
for (INT _Idx = 0; _Idx < (INT)_UrlList.size(); _Idx++) {
_Url = _UrlList[_Idx];
CVarTypeCvt::trim(_Url," \t\r\n");
/*if (!_Url.empty() && CanOpenWebPage(_Url)) {
::ShellExecute(NULL, "open",_Url.c_str(), NULL, NULL, SW_SHOWNORMAL);
break;
}*/
if (!_Url.empty()) {
urls.push_back(_Url);
}
}
HANDLE* pHandles = new HANDLE[urls.size()];
for(int i = 0; i < urls.size(); ++i)
{
unsigned _ThreadID;
HANDLE _hThread = (HANDLE)_beginthreadex(NULL,NULL,TestUrlSpeed,(void*)new string(urls[i]),NULL,&_ThreadID); pHandles[i] = _hThread;
}
DWORD dw = WaitForMultipleObjects(urls.size(), pHandles, FALSE, 10000);
if(dw != WAIT_FAILED && dw != WAIT_TIMEOUT)
{
DWORD dwRet;
GetExitCodeThread(pHandles[dw - WAIT_OBJECT_0], &dwRet);
if(dwRet)
{
::ShellExecute(NULL, "open",urls[dw - WAIT_OBJECT_0].c_str(), NULL, NULL, SW_SHOWNORMAL);
}
}
for(int i = 0; i < urls.size(); ++i)
{
if(pHandles[i] != NULL)
{
CloseHandle(pHandles[i]);
pHandles[i] = NULL;
}
}
delete [] pHandles;
pHandles = NULL;
}
return 0;
}
void OpenUrlUseIE(string _Url, BOOL _Async = TRUE)
{
if (_Url.empty()) return;
if (_Async) {
unsigned _ThreadID;
HANDLE _hThread = (HANDLE)_beginthreadex(NULL,NULL,OpenUrlUseIEThread,(void*)new string(_Url),NULL,&_ThreadID);
CloseHandle(_hThread);
_hThread = NULL;
}
else {
::ShellExecute(NULL, "open",_Url.c_str(), NULL, NULL, SW_SHOWNORMAL);
}
}

  

检测网页是否可以打开, 再使用IE打开网页的更多相关文章

  1. 原创:C语言打开、下载、删除网页,统计网页字符个数

    本程序由本人在华夏联盟的ID闪电笨笨原创,首发地址:http://bbs.hx95.com/ 写此程序希望可以可以激发新手学习C语言的积极性! C语言代码实现功能如下:            1.实现 ...

  2. Android 在安装完成界面,点击打开应用程序。在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开

    Android 在安装完成界面,点击打开应用程序.在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开. etong_123的专栏 - 博客频道 - CSDN.NET htt ...

  3. IE能够打开网页 可是chrome和火狐打不开网页解决的方法

    一次偶然.电脑的浏览器打不开经常使用的网页,奇怪的是IE能够打开 之外的其它浏览器都不能够,结果百度一下.找到一个帖子,亲自測试一下,果真能够解决.记录例如以下: (1)開始-执行-输入CMD-确定- ...

  4. 使用selenium webdriver&plus;beautifulsoup&plus;跳转frame,实现模拟点击网页下一页按钮,抓取网页数据

    记录一次快速实现的python爬虫,想要抓取中财网数据引擎的新三板板块下面所有股票的公司档案,网址为http://data.cfi.cn/data_ndkA0A1934A1935A1986A1995. ...

  5. 【Xcode 4 无法打开 Xcode 5 DP 打开过的工程文件 解决方法】

    试用Xcode 5 DP打开现有工程文件后再用Xcode4打开后 Xcode 4 会进入崩溃模式折腾了几次发现下面的方法可以让工程文件恢复 如果在Xcode5-DP中打开过xib文件需要在侧栏中修改I ...

  6. 安装vs2017后造成无法打开xproj项目无法打开

    安装vs2017后,再用vs2015打开xproj项目的时候会报错: Error MSB4019 The imported project "C:\Program Files\dotnet\ ...

  7. 快速完成网页设计&comma;10个顶尖响应式HTML5网页模板助你一臂之力

    为了寻找一个优质的网页模板,网页设计师和开发者往往可能会花上大半天的时间.不过幸运的是,现在的网页设计师和开发人员已经开始共享HTML5,Bootstrap和CSS3中的免费网页模板资源.鉴于网站模板 ...

  8. 【已解决】每次打开Excel时会同时打开一个空的Excel表格

    每次打开Excel时会同时打开一个空的Excel表格,情况如图. 官方解法如下,本人验证有效: 方法1, 请到以后路径中检查是否存在与空白文件夹同名字的Excel文件,删除它. C:\Users\\A ...

  9. Windows组件:打开MSDTC,恢复Windows TaskBar,查看windows日志,打开Remote Desktop,打开Services,资源监控

    一,Win10 打开 MSDTC 1,Win+R 打开运行窗口,输入 dcomcnfg,打开组件服务窗口 2,在组件服务 catalog下找到 Distributed Transaction Coor ...

随机推荐

  1. Android Activity 启动模式和任务栈

    在了解了基本的Activity的生命周期后,我们能够很好的在一个Activity上面做相关的业务.但是这是不够的,因为Android通过任务栈来保存整个APP的Activity,合理的调度任务栈才能够 ...

  2. centos 6&period;7下 elasticsearch的安装

    1.下载elasticsearch的安装包,用ftp上传到linux系统下目录中,如在当前用户root的目录下新建目录elasticsearch,放入安装包 不要忘了添加执行权限 chmod +x * ...

  3. java常用方法总结

    最近打算换工作,还是需要补一下面试的基础知识,写了一些面试中可能会用到的常用算法.方法,以便复习 //99乘法表 /** * 1*1 * 1*1 1*2 * 1*1 1*2 1*3 * …… * */ ...

  4. iOS prototype Cells

    在storyboard这方面用到的很少,cell也没有用到.上个周五,汤老师快下班的时候说:你看,我的界面已经搭建完成了.而我这边还没有头绪.现在想把需求模拟一下,结果流程没有弄完,自己在这搭起界面来 ...

  5. maxscript&comma; 数组和字符串下标是从1开始的

    maxscript中数组和字符串下标是从1开始的.

  6. 周末&OpenCurlyDoubleQuote;干活”之 Mesos Meetup

    周末两天都是大雾霾天,作为运营也不能在家宅,告别了技术就得腿儿勤点儿. 非常感谢 Linker 的 Sam Chen 和 数人科技 的 CTO 共同组织的Mesos Meetup,OneAPM 最帅的 ...

  7. Firefox恢复书签

    Firefox虽然有网络同步功能,但是网络账户中没有保存历史书签.一旦电脑故障,书签可能会丢失,更要命的是自动同步後,网上书签也被覆盖的一干二净.怎么办呢? 大多数时候还是可以在本机找回书签 1:打开 ...

  8. grid 布局

    display:grid 是一种新的布局方式,旧的布局方式通常有副作用,例如float(需要额外修复浮动)或者inline-block(两个元素之间的空格问题)   把父元素定义为grid,就像表格一 ...

  9. &lbrack;转&rsqb; javascript 保留两位小数 &lpar;且不四舍五入&rpar;

    本文转自:https://blog.csdn.net/qq_40171039/article/details/79729503 保留两位小数且不四舍五入: 方法一: var a = 2.461; va ...

  10. 分布式监控系统Zabbix-批量添加聚合图形

    之前部署了Zabbix(3.4.4版本)监控环境,由于主机比较多,分的主机组也比较多,添加聚合图形比较麻烦,故采用python脚本进行批量添加聚合图形.脚本下载地址:https://pan.baidu ...