姓名:吴晓春
联系电话:13862744018
电子信箱:wuxc@ntzx.net.cn
通讯地址:江苏省南通市中学堂街 9 号信息技术学科
邮编:226000
作者简介:男,教师,软件设计师。
在C#中用 WebClient 类编写整站下载软件
江苏省南通中学信息技术学科 吴晓春
[ 摘要 ] 在 VC#2005 环境下,开发一个整站下载程序。使用队列作为主要的数据结构,存放下载链
接并依次下载,直到完成。
[关键词] 队列、WebClient 类、异步调用、委托、多线程
编程思路
整站下载又称为离线浏览,如大名鼎鼎 WebZipt 可以下载整个站点的内容,来离线游览或研究。本人
试着写了一个整站下载程序,介绍给大家。 本程序用队列作为数据结构,存放下载链接。首先,将起始链
接置入队列;然后,依次下载队列中的每一项链接,保存到本地。若下载的是网页,就搜索其中包含超链
接,判断队列中是否包含该链接(防止循环链接),没有则加入队列。直到队列中全部链接下载完成。队列内
容及下载进度将在界面上显示,并统计下载的文件数和搜索到的链接数。
[ 程序示意 ]
下载队列
■■■■■■■■■■■■■■■■■■■■
headi
private void startdown()
下载 headi 指示的链接
下载项为网页时
private void spreaddelegate(……)
搜索链接,加入队列。
private void writelocal(……);网页存盘
mainWc.DownloadFile(……);其它下载直接存盘
[ 程序界面 ]
下面就程序中涉及到的技术如 Webclient 类下载数据、BeginInvoke 异步委托调用、在工作线程中更新
UI、正则表达式搜索超链接等逐个讲述,并给出完整代码。
WebClient 类
WebClient 类提供向 URI 标识的任何本地、Intranet 或 Internet 资源发送数据以及从这些资源接收数
据的公共方法。WebClient 类提供的下载数据的方法主要有:
DownloadData 从资源下载数据并返回字节数组
DownloadFile 从资源将数据下载到本地文件
DownloadString 从资源下载数据并字串
本文用到 WebClient.DownloadFile 方法和 WebClient. DownloadString 方法:
public void DownloadFile(string address, string fileName);
[参数]
address 从中下载数据的 URI。
fileName 要接收数据的本地文件的名称。
[异常]
WebExceptionaddress 指示的 URI 无效。
fileName 为空引用。
SecurityException 没有写入本地文件的权限。
[C# 代码片断]
WebClient mainWc = new WebClient();
mainWc.DownloadFile("http://www.china-askpro.com/catalog.shtml", "c:\\catalog.shtml");
//利用 webclien 实现下载功能
public String DownloadString ( string address);
参数 address 从中下载数据的 URI。
返回字串类型
异常 WebException address 指示的 URI 无效。
[C# 代码片断]
WebClient mainWc = new WebClient();
String downUrl="http://www.china-askpro.com/catalog.shtml" ;
String s0 = mainWc.DownloadString(downUrl); //下载网页文件,文件内容保存到字串变量 s0
异步委托
使用 .NET 异步编程,可以在主程序继续执行的同时对耗时较长的方法进行调用。例如,本文示例中
主程序完成下载,异步调用一个方法,该方法搜索下载链接,同时主程序将继续执行。
异步编程在 .NET Framework 的许多区域都支持的功能,这些区域包括:
文件 IO、流 IO、套接字 IO
网络:HTTP、TCP
远程处理信道(HTTP、TCP)和代理
使用 ASP.NET 创建的 XML Web services
异步委托
其它
本例中涉及到的是异步委托,异步委托提供以异步方式调用同步方法的能力。当同步调用一个委托时,
使用 Invoke 方法,直接在当前线程调用目标方法,当前线程等待,直到目标方法运行完毕。当异步调用一
个委托时, 使用 BeginInvoke 方法,公共语言运行库(CRL)将对调用请求进行排队并立即返回到调用方。
目标方法将在 CRL 线程池分配到的线程中执行。提交请求的原始线程(即调用 BeginInvoker 方法所在的线
程)自由地继续,与目标方法所在的线程并行执行。从而提高了程序运行效率,加快了程序下载速度。本文
示例中多处使用异步委托。
[ 异步委托示意 ]
下载线程
异步委托调用
搜索图片超链接线程
异步委托调用
异步委托调用
搜索超链接线程
网页存盘线程
[C# 代码片断]
private void startdown()
{
……
//下载线程
delegate void spreadDelegate(string downstr, string downhost, string urlspath, string regx);
//委托(又称代理)声明
spreadDelegate SDgate1 = new spreadDelegate(spreaddelegate);
SDgate1.BeginInvoke(s0, downHost, savePath,regx,null,null);
//异步委托调用方法 spreaddelegate,搜索图片链接。
spreadDelegate SDgate2 = new spreadDelegate(spreaddelegate);
IAsyncResult ar = SDgate2.BeginInvoke(s0, downHost, savePath, regx,null,null);
while(ar.IsCompleted==false)Thread.Sleep(10);
//异步委托调用方法 spreaddelegate 搜索网页超链接,返回值用于检测该异步委托调用产生的线程是否结束
spreadDelegate SDgate3 = new spreadDelegate(writelocal);
SDgate3.BeginInvoke(s0, title, locaPath + savePath, saveFile, null, null);
//异步委托调用方法 writelocal,保存文件。
……
}
//异步委托调用的两个方法。
private void spreaddelegate(string downstr, string downhost, string urlspath, string regx);
private void writelocal(string s0, string title, string localpath, string localfile);
正则表达式
正则表达式提供了一系列方法(标准、模式),能够高效地创建、比较和修改字符串,以及迅速地分
析大量文本和数据以搜索、移除和替换文本模式。
.NET 基础类库中包含有一个名字空间 System.Text.RegularExpression 和一系列可以充分发挥
规则表达式威力的类。
在名字空间中包含着如下类,它们是:
Capture: 包含一次匹配的结果;
CaptureCollection: Capture 的序列;
Group: 一次组记录的结果,由 Capture 继承而来;
Match: 一次表达式的匹配结果,由 Group 继承而来;
MatchCollection: Match 的一个序列;
MatchEvaluator: 执行替换操作时使用的代理;
Regex: 编译后的表达式的实例。
其中,Regex 类中还包含一些静态的方法:
Escape: 对字符串中的 regex 中的转义符进行转义;
IsMatch: 如果表达式在字符串中匹配,该方法返回一个布尔值;
Match: 返回 Match 的实例;
Matches: 返回一系列的 Match 的方法;
Replace: 用替换字符串替换匹配的表达式;
Split: 返回一系列由表达式决定的字符串;
Unescape:不对字符串中的转义字符转义。
[C# 代码片断]
string regx;
regx=@"
![]()
]+src=\s*(?:'(?
[^']+)'|""(?[^""]+)""|(?[^>\s]+))\s*[^>]*>";
//能与 HTML 中的 与 IMG 标签相匹配的 c#正则表达式
// regx =
@"]+href=\s*(?:'(?[^']+)'|""(?[^""]+)""|(?[^>\s]+))\s*[^>]*>\
s*(?.*?)";
Regex re0 = new Regex(regx, RegexOptions.IgnoreCase);
能与 HTML 中的 HREF 标签相匹配的 c#正则表达式
在 downstr 字串中匹配正则表达式 regx
MatchCollection
foreach (Match m0 in mc0)
mc0 = re0.Matches(downstr);//
//
循环处理每一匹配项
{
}
Boolean bl = true;
string dl = m0.Groups["target"].Value;
……
工作线程与 UI 更新
下如代码片断是单线程的,即所有代码都集中在界面线程(UI 线程)中,当程序执行耗时长的缓慢操作时,
界面几乎被“冻结”,程序更新界面不能立刻反映并且用户操作无法立刻得到响应。
[ c# 代码片断 ]
private void button1_Click(object sender, EventArgs e)
{
startdown(textBox1.Text); }
private void startdown()
……
{
while (headi < downlist.Count)// 耗时长的缓慢操作
{ ……
Treev1.Nodes.add(downstr); //界面不能立刻反映
}
为了解决上述问题,就要把耗时长的操作如磁盘操作、搜索链接等从 UI 线程中分离。方法是在另一线程中
执行这些工作,故称之谓工作线程,有时也称为辅助线程。
[ c# 代码片断 ]
private void button1_Click(object sender, EventArgs e)//UI 线程
{
}
Thread th = new Thread(new ThreadStart(startdown));//工作线程
th.Start();
private void startdown()
{……
while (headi < downlist.Count)
{
……
Treev1.Nodes.add(downstr);
//新问题:不能在工作线路中更新 UI 界面
}
}
上述代码,创建了工作线程 th 来执行耗时的缓慢操作,有效地与 UI 线程分开,以期达到界面快速响应。
但带来了另一问题,在工作线程更新 UI 线程的界面是不安全的,因而也是不被允许的。怎么办呢,简单地
说,可以利用窗体或控件的 Invoke 或 BeginInvoke 方法来携带委托以及参数列表,送回到 UI 线程并在 UI 线
程中调用委托,更新界面。改进后的代码如下:
[ c# 代码片断 ]
private void button1_Click(object sender, EventArgs e)
{
}
Thread th = new Thread(new ThreadStart(startdown));
th.Start();
private void startdown()
{ ……
while (headi < downlist.Count)
{
……
ShowUIDelegate showUI = new ShowUIDelegate(ShowUI);
this.BeginInvoke(showUI, new object[] { downUrl, -1 });
// this.BeginInvoke,可以把数据送回到 UI 线程,在 UI 线程中执行 ShowUI 方法,更新界面
}
}
delegate void ShowUIDelegate(string downstring, int i);
void ShowUI(string downstring, int i)
{……
treev1.Nodes.Add(downstring);
if (downstring == "red")
treev1.Nodes[i].ForeColor = Color.Red;//下载连接出错
else
treev1.Nodes[i].ForeColor = Color.Blue;//已经正常下载
treev1.Nodes[i].Checked = true;
label3.Text = i.ToString();//已经处理下载文件数
label2.Text = treev1.Nodes.Count.ToString();
}
[完整调用示意图]
UI 线程
th = new Thread(…)
下载线程 TH
Sdgate1.BeginInvoke(…)
搜索图片超链接线程
this.BeginInvoke
Sdgate2.BeginInvoke(…)
搜索超链接线程
SDgate3.BeginInvoke(…)
网页存盘线程
完整代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using System.Collections;
using System.Threading;
namespace mydownload
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); }
private ArrayList downlist = new ArrayList();
//下载队列,存放下载链接
delegate
void ShowUIDelegate(string downstring, int i); //界面更新函数委托
void ShowUI(string downstring, int i) //界面更新函数
{
if (textBox1.InvokeRequired == false)
{
if (i == -1) treev1.Nodes.Add(downstring);//添加下载链接到 treeview
if (i != -1 || downstring == "red")
{
}
if (downstring == "red")
treev1.Nodes[i].ForeColor = Color.Red;//下载连接出错
else
treev1.Nodes[i].ForeColor = Color.Blue;//已经正常下载
treev1.Nodes[i].Checked = true;
label3.Text = (i + 1).ToString();
//已经处理下载文件数
label2.Text = treev1.Nodes.Count.ToString(); //已经搜索到的下载链接数
}
else
{
}
ShowUIDelegate showUI = new ShowUIDelegate(ShowUI);
BeginInvoke(showUI, new object[] { downstring, i });
}
//界面更新函数结束
delegate void DownDelegate();
private void startdown()
//下载函数
{
int headi = 0;
//指向下载队列头部,以获取下载链接
String savePath, saveFile; //保存下载文件的相对路径和文件名
String s0, title;
//下载到的网页文件内容字串,及其中的标题
String downUrl = textBox1.Text ;
//下载起始链接
String downHost = downUrl.Substring(0, downUrl.LastIndexOf("/")+1); //起始链接中的主机
String locaPath = "d:/myaskpro/";//保存到本地路径
downlist.Add(downUrl);
// 添加初始下载链接到队列
ShowUI( downUrl, -1 );
//更新界面
WebClient mainWc = new WebClient();
//利用 webclien 实现下载功能
while (headi < downlist.Count)
{
//扫描队列,逐个下载
downUrl = downlist[headi].ToString(); //当前下载项
ShowUI("", headi );
savePath = downUrl.Replace(downHost, "");
//获取相对路径
if (savePath.LastIndexOf("/") > 0)
//分离文件和路径
saveFile = savePath.Substring(savePath.LastIndexOf("/") + 1);
savePath = savePath.Substring(0, savePath.LastIndexOf("/"));
saveFile = savePath;
savePath = "";
{
}
else
{
}
try
{
if (downUrl.IndexOf("htm") > 0 || downUrl.IndexOf("html") > 0 || downUrl.IndexOf("shtml") > 0)
{
s0 = mainWc.DownloadString(downUrl); //下载网页文件,文件内容保存到字串变量 s0
s0 = s0.ToLower();
title = s0.Substring(s0.IndexOf("
") + 7, s0.IndexOf("") - s0.IndexOf("") - 7);
if(s0.IndexOf("<!-- qa start -->")>0&&s0.IndexOf("<!-- qa end -->")>0)
s0 = s0.Substring(s0.IndexOf("<!-- qa start -->") + 17, s0.IndexOf("<!-- qa end -->") - s0.IndexOf("<!--
qa start -->") - 17);
s0 = s0.Replace(downHost, "");//过滤相关信息
//异步委托调用 spreaddelegate 函数,搜索图片链接,并加入下载队列 downlist
string regx =
@"<img[^>]+src=\s*(?:'(?<target>[^']+)'|""(?<target>[^""]+)""|(?<target>[^>\s]+))\s*[^>]*>";
spreadDelegate SDgate1 = new spreadDelegate(spreaddelegate);
SDgate1.BeginInvoke(s0, downHost, savePath,regx,null,null);
//或直接调用 spreaddelegate(s0, downHost, savePath, regx);
//异步委托调用 spreaddelegate 函数,搜索超链接,并加入下载队列 downlist
regx =
@"<a[^>]+href=\s*(?:'(?<target>[^']+)'|""(?<target>[^""]+)""|(?<target>[^>\s]+))\s*[^>]*>\s*(?<text>.*?)</a>
";
spreadDelegate SDgate2 = new spreadDelegate(spreaddelegate);
IAsyncResult ar = SDgate2.BeginInvoke(s0, downHost, savePath, regx,null,null);
//或直接调用 spreaddelegate(s0, downHost, savePath, regx);
</div>
</div>
</div>
</div>
</div>
</div>
<div class="article-actions clearfix">
<div class="shares">
<strong>分享到:</strong>
<a href="javascript:;" data-url="https://www.ziliaoku.com/res/info_892db3331bfe4e8e9855871db82903d1.html" class="share-weixin" title="分享到微信"><i class="fa"></i><span class="share-popover"><span class="share-popover-inner" id="weixin-qrcode"><canvas width="80" height="80"></canvas></span></span></a>
<a etap="share" data-share="weibo" class="share-tsina" title="分享到微博"><i class="fa"></i></a>
<a etap="share" data-share="tqq" class="share-tqq" title="分享到腾讯微博"><i class="fa"></i></a>
<a etap="share" data-share="qq" class="share-sqq" title="分享到QQ好友" href="http://connect.qq.com/widget/shareqq/index.html?url=https://www.ziliaoku.com/res/info_892db3331bfe4e8e9855871db82903d1.html&desc=C#中的WebClient类编写整站下载软件.doc&summary=C#中的WebClient类编写整站下载软件.doc&site=zeshlife&pics=https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/78/8b/13/788b13e8d57842f1b617d45d463897e9.doc-1.png" target="_blank"><i class="fa"></i></a>
<a etap="share" data-share="qzone" class="share-qzone" title="分享到QQ空间"><i class="fa"></i></a>
<a etap="share" data-share="renren" class="share-renren" title="分享到人人网"><i class="fa"></i></a>
<a etap="share" data-share="douban" class="share-douban" title="分享到豆瓣网" href="http://www.douban.com/share/service?image=https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/78/8b/13/788b13e8d57842f1b617d45d463897e9.doc-1.png&href=https://www.ziliaoku.com/res/info_892db3331bfe4e8e9855871db82903d1.html&name=C#中的WebClient类编写整站下载软件.doc&text=C#中的WebClient类编写整站下载软件.doc" target="_blank"><i class="fa"></i></a>
<a etap="share" data-share="line" class="share-line" title="分享到Line"><i class="fa"></i></a>
<a etap="share" data-share="twitter" class="share-twitter" title="分享到Twitter"><i class="fa"></i></a>
<a etap="share" data-share="facebook" class="share-facebook" title="分享到Facebook"><i class="fa"></i></a>
</div>
<a href="javascript:;" class="action-like" data-pid="738" etap="like"><i class="fa"></i>赞</a>
<a href="javascript:;" class="action-rewards" etap="rewards" onclick="_addFavorite();"><i class="fa"></i>收藏</a>
</div>
<nav class="article-nav">
<span class="article-nav-prev">上一篇<br><a href="/res/info_d105df1c75684636bc6fc5afc1ca4892.html" rel="prev">TerraExplorer Pro v7.0.1用户二次开发手册中文版.pdf</a></span>
<span class="article-nav-next">下一篇<br><a href="/res/info_aa758d2bdb4c421a867babfb54e4acd2.html" rel="next">linkedin-pyhon-test.docx</a></span>
</nav>
<div class="postitems">
<h3>相关推荐</h3>
<ul>
<li><a href="/res/info_zzz8bbffpzwc77d3.html"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/96/37/f9/9637f9bca5da44bf9a72f2353532ddea.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/96/37/f9/9637f9bca5da44bf9a72f2353532ddea.doc-1.jpg" class="thumb" style="display: inline;"></span>2023年江西萍乡中考道德与法治真题及答案.doc</a></li>
<li><a href="/res/info_zzv4kvehwxajlrrd.html"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/3f/20/20/3f20200fa16c42fe973b806ef1833c15.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/3f/20/20/3f20200fa16c42fe973b806ef1833c15.doc-1.jpg" class="thumb" style="display: inline;"></span>2012年重庆南川中考生物真题及答案.doc</a></li>
<li><a href="/res/info_zzutixupdlfsp4gm.html"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/f2/52/77/f252773010bc416bb15350f6ac835eb3.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/f2/52/77/f252773010bc416bb15350f6ac835eb3.doc-1.jpg" class="thumb" style="display: inline;"></span>2013年江西师范大学地理学综合及文艺理论基础考研真题.doc</a></li>
<li><a href="/res/info_zzsw805nk55ktbj6.html"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/e5/2d/a9/e52da94308cc490887b8f5c46709e097.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/e5/2d/a9/e52da94308cc490887b8f5c46709e097.doc-1.jpg" class="thumb" style="display: inline;"></span>2020年四川甘孜小升初语文真题及答案I卷.doc</a></li>
<li><a href="/res/info_zzo0tzo32vipprxu.html"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/a7/3e/00/a73e0061e54941e6863e426522bade6a.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/a7/3e/00/a73e0061e54941e6863e426522bade6a.doc-1.jpg" class="thumb" style="display: inline;"></span>2020年注册岩土工程师专业基础考试真题及答案.doc</a></li>
<li><a href="/res/info_zznacs5xqljofnz1.html"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/bb/7a/32/bb7a3246ed2243cfa3ce8b05d4aa359e.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/bb/7a/32/bb7a3246ed2243cfa3ce8b05d4aa359e.doc-1.jpg" class="thumb" style="display: inline;"></span>2023-2024学年福建省厦门市九年级上学期数学月考试题及答案.doc</a></li>
<li><a href="/res/info_zzl1gsww6q8h52fa.html"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/fc/0e/b0/fc0eb0b957a3463bae5b6e90390d446a.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/fc/0e/b0/fc0eb0b957a3463bae5b6e90390d446a.doc-1.jpg" class="thumb" style="display: inline;"></span>2021-2022学年辽宁省沈阳市大东区九年级上学期语文期末试题及答案.doc</a></li>
<li><a href="/res/info_zzjb9rbw4rxdb8lc.html"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/7f/58/8a/7f588a3487ac4a58ba609c40ca2cc0bd.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/7f/58/8a/7f588a3487ac4a58ba609c40ca2cc0bd.doc-1.jpg" class="thumb" style="display: inline;"></span>2022-2023学年北京东城区初三第一学期物理期末试卷及答案.doc</a></li>
<li><a href="/res/info_zzd5wrjymt6tiath.html"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/f5/f0/10/f5f0100141344f8cb5f2670be453cec9.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/f5/f0/10/f5f0100141344f8cb5f2670be453cec9.doc-1.jpg" class="thumb" style="display: inline;"></span>2018上半年江西教师资格初中地理学科知识与教学能力真题及答案.doc</a></li>
<li><a href="/res/info_zzcfv7cli5t0npk3.html"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/0c/d0/0c/0cd00c52726241acab6ba9a853146da1.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/0c/d0/0c/0cd00c52726241acab6ba9a853146da1.doc-1.jpg" class="thumb" style="display: inline;"></span>2012年河北国家公务员申论考试真题及答案-省级.doc</a></li>
<li><a href="/res/info_zz91b71hx63ngobo.html"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/11/56/bc/1156bc0125dd4245bf23aa9c02b040d2.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/11/56/bc/1156bc0125dd4245bf23aa9c02b040d2.doc-1.jpg" class="thumb" style="display: inline;"></span>2020-2021学年江苏省扬州市江都区邵樊片九年级上学期数学第一次质量检测试题及答案.doc</a></li>
<li><a href="/res/info_zz8ngxhpcerte231.html"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/b5/bc/c3/b5bcc35f57c74788ad625ee2d2448a52.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/b5/bc/c3/b5bcc35f57c74788ad625ee2d2448a52.doc-1.jpg" class="thumb" style="display: inline;"></span>2022下半年黑龙江教师资格证中学综合素质真题及答案.doc</a></li>
</ul>
</div>
</div>
</div>
<div class="sidebar">
<div class="widget widget-textosst">
<a class="style01" href="/g_c33.html" target="_blank">
<strong>
资料库
</strong>
<h2>
后端
</h2>
<p>
共收录2142份资料,累计10个分类,关注成员有19位,主要包括:Perl,Docker,Delphi,VB,PHP,Java,C,C#,Python,C++
</p>
</a>
</div>
<div class="widget widget-htags">
<h3>
热门标签
</h3>
<div class="items">
<a href="/key_Perl_1.html" target="_blank" title="Perl">Perl</a>
<a href="/key_Docker_1.html" target="_blank" title="Docker">Docker</a>
<a href="/key_Delphi_1.html" target="_blank" title="Delphi">Delphi</a>
<a href="/key_VB_1.html" target="_blank" title="VB">VB</a>
<a href="/key_PHP_1.html" target="_blank" title="PHP">PHP</a>
<a href="/key_Java_1.html" target="_blank" title="Java">Java</a>
<a href="/key_C_1.html" target="_blank" title="C">C</a>
<a href="/key_C%23_1.html" target="_blank" title="C#">C#</a>
<a href="/key_Python_1.html" target="_blank" title="Python">Python</a>
<a href="/key_C%2B%2B_1.html" target="_blank" title="C++">C++</a>
</div>
</div>
<div class="widget widget-postlist">
<h3>
最新资料
</h3>
<ul><li><a href="/res/info_dqbz8ogo25ttlam8.html" style="word-wrap: break-word;"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/e6/cf/4d/e6cf4d1a1b06416d85c62a6627056a6f.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/e6/cf/4d/e6cf4d1a1b06416d85c62a6627056a6f.doc-1.jpg" class="thumb" style="display: inline;"></span>2022-2023学年河北省唐山市高三上学期期末数学试题及答案.doc</a></li><li><a href="/res/info_qc5ty3yf6tk2c25m.html" style="word-wrap: break-word;"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/da/3a/83/da3a83dc320d43d4826c106daec6fec5.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/da/3a/83/da3a83dc320d43d4826c106daec6fec5.doc-1.jpg" class="thumb" style="display: inline;"></span>2022-2023学年河北省张家口市高三上学期期末数学试题及答案.doc</a></li><li><a href="/res/info_m0yr0bwx0zvps8g0.html" style="word-wrap: break-word;"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/31/c8/9e/31c89ed1045c4c36b5a87d4894999de1.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/31/c8/9e/31c89ed1045c4c36b5a87d4894999de1.doc-1.jpg" class="thumb" style="display: inline;"></span>2022-2023学年河北省衡水市高三上学期期末语文试题及答案.doc</a></li><li><a href="/res/info_3pbmjf6yc3kpnrw1.html" style="word-wrap: break-word;"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/e0/6a/8c/e06a8c8ed7b043dea71a42462d9c9d43.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/e0/6a/8c/e06a8c8ed7b043dea71a42462d9c9d43.doc-1.jpg" class="thumb" style="display: inline;"></span>2022-2023学年河北省保定市高三上学期期末数学试题及答案.doc</a></li><li><a href="/res/info_8gks7ez19hdwm56j.html" style="word-wrap: break-word;"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/7e/82/e5/7e82e5288edd476889d6a287737adf0f.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/7e/82/e5/7e82e5288edd476889d6a287737adf0f.doc-1.jpg" class="thumb" style="display: inline;"></span>2022-2023学年河北省张家口市高三上学期期末语文试题及答案.doc</a></li><li><a href="/res/info_v0exlfmpzj2r1k6x.html" style="word-wrap: break-word;"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/08/1e/25/081e25f43efd442c8a12b62ec8fa48b1.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/08/1e/25/081e25f43efd442c8a12b62ec8fa48b1.doc-1.jpg" class="thumb" style="display: inline;"></span>2022-2023学年河北省石家庄市高三上学期期末语文试题及答案.doc</a></li><li><a href="/res/info_332tqgwoxby4e4pk.html" style="word-wrap: break-word;"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/d9/7f/75/d97f756355a14fdfa6aa8ef8cdb1f962.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/d9/7f/75/d97f756355a14fdfa6aa8ef8cdb1f962.doc-1.jpg" class="thumb" style="display: inline;"></span>2020-2021年四川省凉山州西昌市高一物理上学期期中试卷及答案.doc</a></li><li><a href="/res/info_se75katfrrhgasg2.html" style="word-wrap: break-word;"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/b5/ce/d1/b5ced10e0aa6432f8597d6ce8c619894.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/b5/ce/d1/b5ced10e0aa6432f8597d6ce8c619894.doc-1.jpg" class="thumb" style="display: inline;"></span>2020-2021年四川省遂宁市安居区高一英语上学期期中试卷及答案.doc</a></li><li><a href="/res/info_jopp59ho0y2mkxtu.html" style="word-wrap: break-word;"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/bc/fd/3a/bcfd3aaef5834ad68afe3c8577cff4c0.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/bc/fd/3a/bcfd3aaef5834ad68afe3c8577cff4c0.doc-1.jpg" class="thumb" style="display: inline;"></span>2020-2021年四川省西昌市高一英语上学期期中试卷及答案.doc</a></li><li><a href="/res/info_ctcta4r0peitip7b.html" style="word-wrap: break-word;"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/9a/fd/de/9afdde3b132143eebb41c526a70b67ea.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/9a/fd/de/9afdde3b132143eebb41c526a70b67ea.doc-1.jpg" class="thumb" style="display: inline;"></span>2021-2022年四川省广安市岳池县高一地理上学期期中试卷及答案.doc</a></li><li><a href="/res/info_5kj24xatcc95u2oj.html" style="word-wrap: break-word;"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/41/2b/f6/412bf64f3e8c4db19c74d3c82625ef94.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/41/2b/f6/412bf64f3e8c4db19c74d3c82625ef94.doc-1.jpg" class="thumb" style="display: inline;"></span>2021-2022年四川省成都市郫都区高一物理上学期期中试卷及答案.doc</a></li><li><a href="/res/info_lww42ijiamo88if4.html" style="word-wrap: break-word;"><span class="thumbnail"><img src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/6d/f8/de/6df8de4794874e0abdcc2823b80aac37.doc-1.jpg" data-src="https://img01.ziliaoku.com/38ec5853054240eb91f23f3a01141758/previews/6d/f8/de/6df8de4794874e0abdcc2823b80aac37.doc-1.jpg" class="thumb" style="display: inline;"></span>2021-2022年四川省广安市岳池县高一物理上学期期中试卷及答案.doc</a></li></ul>
</div>
</div>
</section>
<form id="payForm" action="/Pay/_AddOrder" method="post">
<input type="hidden" name="tradeType" value="Resource" />
<input type="hidden" name="num" value="1" />
<input type="hidden" name="resId" value="892db3331bfe4e8e9855871db82903d1" />
<input type="hidden" name="orderId" value="" />
<input type="hidden" name="payPlatForm" value="WxH5Pay" />
</form>
<footer class="footer">
<div class="bomnav">
</div>
<div class="bomnav">
<a href="/site-about.html" target="_blank">关于本站</a> <a href="/site-contact.html" target="_blank">联系我们</a> <a href="/site-copyright.html" target="_blank">侵权处理</a> <a href="/site-download_statement.html" target="_blank">免责声明</a>
<a target="_blank" href="https://beian.miit.gov.cn/">冀ICP备17022707号</a>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?7733904a9db9b513a05a5e2177918a24";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</div>
<span id="copyrights">
© 2025 本站由 <a href="https://www.ziliaopu.net" target="_blank">资料铺</a> 提供技术支持 <a href="/sitemap.xml" target="_blank">网站地图</a>
</span>
</footer>
<script type="text/javascript">
if (window.jQuery)
$.post("/ajax/PostTrackLog", { type: 201, title: document.title, data: '{}', key: location.href, referrer: document.referrer, url: location.href }, function (result) { });
</script>
<script type='text/javascript' src='/themes/tob/js/main.js?ver=1.1'></script>
<script type="text/javascript" src="/themes/tob/js/layer/layer.js"></script>
<script type="text/javascript">
function isHaveDownloadPower_New() {
var url = "/Res/_GetDownloadPower_New?resId=892db3331bfe4e8e9855871db82903d1";
$.ajax({
type: 'POST',
url: url,
data: { payPlatForm: "WxH5Pay", tradeType: "Resource", num: 1, resId: "892db3331bfe4e8e9855871db82903d1" },
method: 'POST'
}).done(function (data, textStatus, jqXHR) {
if (data.isDownLoad) {
location.href = $('.downloada').attr('data-href');
}
else {
layer.open({
type: 2,
title: '请通过以下方式下载',
shadeClose: false,
shade: 0.6,
area: ['500px', '500px'],
content: '/res/pretask_892db3331bfe4e8e9855871db82903d1.html'
});
}
console.log(data);
});
}
</script>
<script type="text/javascript">
function isHaveDownloadPower(resId) {
//之所以不将支付逻辑嵌入到页面,是因为微信支付内打开此页时,iframe无法加载jssdk支付逻辑,应该是有iframe无法唤起微信的支付弹窗这个官方限制
//正确逻辑应该是:
//1.监测当前用户是否有下载权限,如果有直接下载
//2.如果没有权限,那么弹窗完成任务后再下载
//其中任务有:登录后赠送/关注公众号后下载/支付后下载/充值vip后下载/。。。
if (location.href.indexOf('isdebug') > 0||true) {
isHaveDownloadPower_New();
return;
}
var url = "/Res/_GetDownloadPower?resId=892db3331bfe4e8e9855871db82903d1";
$.ajax({
type: 'POST',
url: url,
data: { payPlatForm: "WxH5Pay", tradeType: "Resource", num: 1, resId: "892db3331bfe4e8e9855871db82903d1" },
method: 'POST'
}).done(function (data, textStatus, jqXHR) {
if (data.isDownLoad) {
location.href = $('.downloada').attr('data-href');
}
else {
var payUrl = 'https://pay.ziliaopu.net/38ec5853054240eb91f23f3a01141758/pay/confirm.html?globalUId=3bda9279c72846e8a9412a6ae0f7b5af&tradeType=Resource&num=1&resId=892db3331bfe4e8e9855871db82903d1&returnUrl=https%3A%2F%2Fwww.ziliaoku.com%2Fres%2Fdownload_892db3331bfe4e8e9855871db82903d1.html';
location.href = payUrl;
return;
}
console.log(data);
});
}
function _addFavorite() {
var url = window.location;
var title = document.title;
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf("360se") > -1) {
alert("由于360浏览器功能限制,请按 Ctrl+D 手动收藏!");
} else if (ua.indexOf("msie 8") > -1) {
window.external.AddToFavoritesBar(url, title); //IE8
} else if (document.all) {//IE类浏览器
try {
window.external.addFavorite(url, title);
} catch (e) {
alert('您的浏览器不支持,请按 Ctrl+D 手动收藏!');
}
} else if (window.sidebar) {//firfox等浏览器; window.sidebar.addPanel(title, url, "");
} else {
alert('您的浏览器不支持,请按 Ctrl+D 手动收藏!');
}
}
$(function () {
$.ajax({
url: "/Res/_UpdateLookTimes?resId=892db3331bfe4e8e9855871db82903d1",
method: 'get',
dataType: 'json',
cache: false, //不保存缓存
success: function(data) {}
});
$('.tab-nav li a').click(function () {
$(".tab-item").hide();
$('[data-tab-item=' + $(this).attr("data-tab-target") + ']').show();
});
var articleBar = $('.article-bar');
$(window).scroll(function () {
var h = document.documentElement.scrollTop + document.body.scrollTop;
var contentHeight = $('.article-content').height();
if (h > 200 && h < contentHeight) {
articleBar.addClass("fixed");
$('.article-bar').css('width', $('.article-content').width());
$('.article-bar').css('margin-left', $('.article-content').offset().left);
}
else {
articleBar.removeClass("fixed");
$('.article-bar').css('width', '');
$('.article-bar').css('margin-left', '');
}
});
})
</script>
<!--Cached In 8/12/2025 6:11:57 AM-->
</body>
</html>