存放个自己写的获取网页源码,掌握了:

1.利用CreateOLEObject方式获取源码

2.自动判断网页格式编码

需要使用到的单元:Winapi.ActiveX,System.Win.ComObj,System.WideStrUtils

需要创建结构体:TResultWebHtml (用于存放返回的源码和Cookies)

Uses Winapi.ActiveX,System.Win.ComObj,System.WideStrUtils;typeTResultWebHtml = recordHtml : String;Cookie : String;end;function GetWebHtml(Url,Method,Code,ReferText,ReferCookies:String;Overtime:Integer;Referer,Accept,Language,Charset,Agent,ContentType:String;Redirect,Encoding,XRequestedWith:BooLean):TResultWebHtml;stdcall;//访问网页
VarI:Integer;XMLHTTP:Olevariant;ResultWebHtml:TResultWebHtml;POvertime:Integer;PUrl,PMethod,PCode,PReferText,PReferCookies:String;PReferer,PAccept,PLanguage,PCharset,PAgent,PContentType:String;PHtml: RawByteString;Temp,PGetCookies:String;TempList:TStringList;HTML:TBytes;
BegintryCoInitialize(nil); //添加 CoInitialize 支持多线程调用XMLHTTP:= CreateOLEObject('WinHttp.WinHttpRequest.5.1');Try //避免超时报错、防止出错等//初始化默认值if Url = '' then Exit else PUrl:=Url; //网址初始化if Method = '' then PMethod:= 'get' else PMethod:= LowerCase(Method); //初始化访问方式if Code <> '' then PCode:= LowerCase(Code);      //初始化网站编码,为空自动选择if ReferText <> '' then PReferText:=ReferText;//设置提交信息,用于Post操作if ReferCookies <> '' then PReferCookies:=ReferCookies;//设置网站Cookiesif Overtime = 0 then POvertime:=15000 Else POvertime:=Overtime * 1000; //设置超时时间if Referer = '' then PReferer:= PUrl else PReferer:= Referer; //设置来路,如果为空则设置为访问网站地址if Accept = '' then PAccept:='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' else PAccept:=Accept;if Language = '' then PLanguage:='zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4' else PLanguage:=Language;if Charset = '' then PCharset:='GBK,utf-8;q=0.7,*;q=0.3' else PCharset:=Charset;if Agent = '' then PAgent:='Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2107.3 Safari/537.36' else PAgent:=Agent;if ContentType = '' then PContentType:='application/x-www-form-urlencoded' else PContentType:=ContentType;XMLHTTP.open(PMethod, PUrl, False);//设置头信息XMLHTTP.setRequestHeader('Referer', PReferer);  // 仅服务器可知 来路XMLHTTP.setRequestHeader('Accept', PAccept);XMLHTTP.setRequestHeader('Accept-Language', PLanguage);//XMLHTTP.setRequestHeader('Accept-Charset', PCharset);XMLHTTP.setRequestHeader('User-Agent', PAgent);XMLHTTP.setRequestHeader('Content-Type', PContentType);XMLHTTP.setRequestHeader('Connection', 'keep-alive');if PReferCookies <> '' then XMLHTTP.setRequestHeader('Cookie', PReferCookies);if Encoding then XMLHTTP.setRequestHeader('Accept-Encoding', 'gzip'); //设置压缩 'gzip'if Redirect then XMLHTTP.Option(6) :=True else XMLHTTP.Option(6) :=False;//设置是否支持转跳if XRequestedWith then XMLHTTP.setRequestHeader('X-Requested-With', 'XMLHttpRequest');XMLHTTP.setTimeouts(POvertime, POvertime, POvertime, POvertime);XMLHTTP.send(PReferText);HTML:=XMLHTTP.responseBody;if PCode = '' then begin //开启自动选择//自动判断网页格式后
        SetString(PHtml, PAnsiChar(Pointer(WideString(XMLHTTP.ResponseBody))), SysStringByteLen(PWideChar(WideString(XMLHTTP.ResponseBody))));if IsUTF8String(PHtml) then Temp := TEncoding.Default.GetEncoding(65001).GetString(HTML) else Temp :=TEncoding.Default.GetString(HTML);end else beginif PCode = 'utf-8' then Temp := TEncoding.Default.GetEncoding(65001).GetString(HTML) else Temp :=TEncoding.Default.GetString(HTML);end;ResultWebHtml.Html:=Temp;//获取返回COOKIESTemp:=XMLHTTP.GetallResponseHeaders;TempList:=TStringList.Create;TempList.Text :=Temp;for I := 0 to TempList.Count -1 do beginif Pos('Set-Cookie:',TempList[I]) <> 0 then beginTemp:=Copy(TempList[I],12,Length(TempList[I]));Temp:=Copy(Temp,1,Pos(';',Temp));if Temp <> '' then PGetCookies:=PGetCookies+Temp;end;end;TempList.Free;ResultWebHtml.Cookie :=PGetCookies;Result:=ResultWebHtml;exceptEnd;finallyXMLHTTP := Unassigned;CoUnInitialize;end;
End;procedure TForm1.Button1Click(Sender: TObject);
beginMemo1.Text:=GetWebHtml('http://www.cnblogs.com/sishen','Get','','','',30,'','','','','','',True,False,False).Html;
end;

转载于:https://www.cnblogs.com/sishen/p/6671421.html

Delphi XE下获取网页源码记录相关推荐

  1. vc++获取网页源码之使用import+接口方式

    1.使用IWinHttpRequest获取网页源码 首先要创建基于对话框的mfc应用程序 2.import+接口方式 首先导入winhttp.dll,使用IWinHttpRequest接口 #impo ...

  2. C# -爬虫之WebBrowser跨域跨iframe获取网页源码

    前言:这里关键写用WebBrowser跨域跨iframe获取网页源码的部分,本意是要爬取全职高手的有声小说,这类网站特殊,网页上广告大堆,爬起来真麻烦,比如我爬取的网站的mp3源文件下载还需要秘钥的, ...

  3. php如何抓取html代码,使用php如何获取网页源码?

    文章正文内容: 一下是几种常用的获取网页源码的几种方式: 1. file_get_contents 2.curl 3.fopen->fread->fclose 注意: 1.使用file_g ...

  4. 使用WebBrowser控件获取网页源码的方法

    使用WebBrowser控件获取网页源码的方法,网上有很多介绍,但绝大多数的人都是使用以下的方法获取: (WebBrowser1.Document as IHtmlDocument2).body.ou ...

  5. POST教程笔记 - WinHttp获取网页源码

    ①.WinINet与WinHttp的异同点,为什么使用WinHttp讲解? 详情见:<WinINet与WinHttp总结>文档,已经打包给大家了. ②.WinHttp接口调用方式: 微软官 ...

  6. webclient无法获取html文件,C# WebClient获取网页源码的方法

    效果如图 完整代码如下using System; using System.Collections.Generic; using System.ComponentModel; using System ...

  7. [转载]关于webbrowser,innet,xmlhttp获取网页源码的比较!

    webbrowser: 示例: For i = 0 To WebBrowser1.Document.All.length - 1      If WebBrowser1.Document.All(i) ...

  8. PHP如何获取网页源码?

    很多人可能会说那不是很简单 直接 file_get_contents ,但是有的时候这样也是获取不到的 那怎么办? 用CURL,某些不太懂得朋友可能会发现CURL也获取不到,其实是你没配置对 有一个属 ...

  9. Python 爬虫 之 爬虫的一些基本知识和基本操作(爬取视频、图片、获取网页源码等)整理

    Python 爬虫 之 爬虫的一些基本知识和基本操作(爬取视频.图片.获取网页源码等)整理 目录

最新文章

  1. 2W+好评,这个python数据分析课程免费开放3天!
  2. 目标检测Loss大盘点
  3. oracle统计信息收集的作用,oracle 11g 收集统计信息的新特点介绍
  4. 抽屉之Tornado实战(5)--点赞与评论树
  5. UVA1584 ​​​​​​​Circular Sequence【字符串】
  6. 谷歌浏览器的下载位置如何设置 Chrome浏览器下载路径设置方法简述
  7. 折线分割平面(HDU-2050)
  8. dueros模拟测试没有请求后台_DuerOS开放平台
  9. [C++]Linux之C编程异常[true未定义解决方案]
  10. PE 文件格式 详解 一
  11. Impala内存优化
  12. 解决debian (Friendly ARM 嵌入式板)的sudo等一部分命令无法TAB补全
  13. Selenium WebDriver 与 iOS 自动化测试 (做了一些初步的工具对比)
  14. 三星android驱动程序错误,android系统的三星手机插入电脑无法识别
  15. 基于Qt开发的中国象棋 (1) 双人对战
  16. 以风险管理思想构建关键信息基础设施风险评估重器
  17. mysql基础命令集合
  18. LOGO特训营 第六节 字体设计实操(矩形钢笔造字)
  19. s32ds 路径_S32DS 使用 tips--工程属性配置(编译选项和C编译器、汇编器及链接器设置)...
  20. USB设备导致xp系统蓝屏

热门文章

  1. 深度学习的学习记录(五)
  2. 基于opencv做一个HSV的颜色选择器
  3. thinkpadE440 U盘安装mac10.9.4 Gpt分区+Clover+UEFI引导成功记录
  4. iOS小技能:简化版的隐私弹窗
  5. What Types of Movies Do You like ?
  6. 1.Nexus 5x 刷机Android8.1 root-《frida安卓逆向协议爬虫》
  7. 六步解决联想台式电脑两个显示屏配置问题
  8. 海天注塑机(KEBA控制器)数据采集项目案例
  9. java实现deflate文件格式解压压缩
  10. 疯狂html附源码,科技常识:HTML5 直播疯狂点赞动画实现代码 附源码