自定义HTTP抓包和过滤
定义一个http抓包类,发送数据到一个自定义的接受脚本,可以发送成功,并收取数据,但是发送到外网,却不行,分析过在浏览器下发送HTTP请求时的request header 信息,通过模拟请求,但超时...
<br />//定义一个HTTP抓包类,其实也可以用curl。。。。。<br /><br /><?php <br />ini_set('error_reporting', E_ALL);<br />class Httpwrap<br />{<br /> private $hostInfo=null;<br /> <br /> private $requestLine=null;<br /> private $requestHeader=null;<br /> private $emptyLine="\r\n";<br /> private $requestBody=null;<br /> private $requestEntity=null;<br /> <br /> private $responseEntity=null;<br /> private $responseHeader=null;<br /> private $responseBody=null;<br /> private $emptyLinePos=null;<br /> <br /> private $connect=null;<br /> private $errNo=null;<br /> private $errStr=null;<br /> <br /> <br /> public function __construct($url)<br /> {<br /> $this->hostInfo=parse_url($url);<br /> $this->setRequestHeader(array('Host' => $this->hostInfo['host']));<br /> $this->setRequestHeader(array('Connection' => 'keep-alive'));<br /> }<br /> //设置HTTP请求行信息,例如: GET /resources HTTP/1.1<br /> //但为了避免漏掉url中?开始的查询信息,有必要进行判断<br /> public function setRequestLine($method)<br /> {<br /> //如果是POST请求,则自动添加content-type头信息<br /> if(strtolower($method)=='post')<br /> {<br /> $this->setRequestHeader(array('Content-type' => 'application/x-www-form-urlencoded'));<br /> }<br /> if(!empty($this->hostInfo['query']))<br /> {<br /> $this->requestLine=strtoupper($method)." ".$this->hostInfo['path']."?".$this->hostInfo['query']." HTTP/1.1 \r\n";<br /> }<br /> else<br /> {<br /> $this->requestLine=strtoupper($method)." ".$this->hostInfo['path']." HTTP/1.1 \r\n";<br /> }<br /> }<br /> //设置HTTP请求头。<br /> //接收参数是数组类型,通过迭代拼接key:value,并换行<br /> public function setRequestHeader($header)<br /> {<br /> foreach($header as $key => $value)<br /> {<br /> $this->requestHeader .=$key.":".$value."\r\n";<br /> }<br /> }<br /> //设置HTTP请求体<br /> //接收参数是数组类型,通过迭代拼接key=value,因为最后一席拼接会有一个多余的&,所以有必要去掉<br /> public function setRequestBody($body)<br /> {<br /> foreach($body as $key => $value)<br /> {<br /> $this->requestBody .=$key.'='.$value.'&';<br /> }<br /> $offset=strrpos($this->requestBody, '&');<br /> $this->requestBody=substr($this->requestBody, 0, $offset);<br /> }<br /> //组装 请求行+请求头+请求体,并根据请求体的长度,自动填充请求头的content-length字段<br /> public function setRequestEntity()<br /> {<br /> if(!empty($this->requestBody))<br /> {<br /> $contentLength=strlen($this->requestBody);<br /> $this->setRequestHeader(array('Content-length' => $contentLength));<br /> <br /> $this->requestEntity=$this->requestLine.$this->requestHeader."\r\n".$this->requestBody;<br /> }<br /> else<br /> {<br /> $this->requestEntity=$this->requestLine.$this->requestHeader."\r\n";<br /> }<br /> }<br /> //解析主机名的函数,暂时没有用上.......<br /> public function parseHost($url)<br /> {<br /> $pat='#http://([^/]+)#i';<br /> if(preg_match($pat, $url, $match))<br /> {<br /> return $match[1];<br /> }<br /> else<br /> {<br /> echo '匹配主机信息失败<br />';<br /> }<br /> }<br /> //创建到主机的连接<br /> public function createConnect()<br /> {<br /> $this->connect=fsockopen($this->hostInfo['host'], 80, $this->errNo, $this->errStr) or die('连接主机失败'.$this->errStr);<br /> }<br /> //发送请求<br /> public function sendRequest()<br /> {<br /> $this->setRequestEntity();<br /> echo $this->requestEntity;<br /> exit();<br /> $this->createConnect();<br /> $entityLength=strlen($this->requestEntity);<br /> if($entityLength != fwrite($this->connect, $this->requestEntity, $entityLength))<br /> {<br /> die('写入数据失败<br />');<br /> }<br /> else<br /> {<br /> $this->receiveResponse();<br /> }<br /> }<br /> //接受请求,并依次拼接响应体<br /> public function receiveResponse()<br /> {<br /> while(!feof($this->connect))<br /> {<br /> $this->responseEntity .= fread($this->connect, 1024);<br /> }<br /> }<br /> //计算响应头与响应体之间的空行的位置<br /> public function calculateEmptyLinePos()<br /> {<br /> $this->emptyLinePos=strpos($this->responseEntity,"\r\n\r\n",0);<br /> }<br /> //接受响应体的头部....<br /> public function receiveResponseHeader()<br /> {<br /> $this->calculateEmptyLinePos();<br /> $this->responseHeader=substr($this->responseEntity, 0, $this->emptyLinePos);<br /> echo $this->responseHeader;<br /> }<br /> //接收响应体的body部分<br /> public function receiveResponseBody()<br /> {<br /> $this->calculateEmptyLinePos();<br /> $this->responseBody=substr($this->responseEntity, $this->emptyLinePos);<br /> }<br /> //返回请求结果<br /> public function getResponse()<br /> {<br /> return $this->responseEntity;<br /> }<br /> <br /><br /> public function parseResponse()<br /> {}<br /> public function __destruct()<br /> {<br /> //fclose($this->connect);<br /> } <br />}<br />set_time_limit(60);<br />$http=new Httpwrap("http://www.mmkao.com/Beautyleg/");<br />//设置HTTP请求行<br />$http->setRequestLine("get");<br />//设置HTTP头<br />$http->setRequestHeader(array("Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"));<br />$http->setRequestHeader(array("Accept-Language" => "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"));<br />$http->setRequestHeader(array("Accept-Encoding" => "gzip, deflate"));<br />$http->setRequestHeader(array("User-Agent" => "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36"));<br />//$http->setRequestHeader(array("Cookie" => "BAIDU_DUP_lcr=http://www.baidu.com/s?wd=beautyleg&rsv_spt=1&issp=1&f=3&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=6&rsv_sug4=415&rsv_sug1=3&oq=beauty&rsv_sug2=0&rsp=0&inputT=2363; safedog-flow-item=8471BA510DA33350ED344AC374D3044A; bdshare_firstime=1415165097782; cscpvrich_fidx=6; AJSTAT_ok_pages=2; AJSTAT_ok_times=2; CNZZDATA3811623=cnzz_eid%3D253823549-1415164312-http%253A%252F%252Fwww.baidu.com%252F%26ntime%3D1415169712"));<br />//发送数据<br />$http->sendRequest();<br />//$http->receiveResponseHeader();<br /><br />?><br /><br />通过这个类给领一个自定义的脚本,可以发送和接收数据,领一个脚本如下:<br /><br /><?php <br />if(!empty($_POST))<br />{<br /> $str=implode(',',$_POST);<br /> file_put_contents('./post.txt', $str,FILE_APPEND);<br /> echo $str;<br />}<br /><br />?><br />但是给这个网站发送请求时,却超时:网站是:<br />http://www.mmkao.com/Beautyleg/<br />通过chrome给这个网站首页发送请求时的header头信息:<br />Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8<br />Accept-Encoding:gzip,deflate,sdch<br />Accept-Language:zh,en;q=0.8,zh-TW;q=0.6,zh-CN;q=0.4,ja;q=0.2<br />Cache-Control:max-age=0<br />Connection:keep-alive<br />Cookie:BAIDU_DUP_lcr=http://www.baidu.com/s?wd=beautyleg&rsv_spt=1&issp=1&f=3&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=6&rsv_sug4=415&rsv_sug1=3&oq=beauty&rsv_sug2=0&rsp=0&inputT=2363; safedog-flow-item=8471BA510DA33350ED344AC374D3044A; bdshare_firstime=1415165097782; cscpvrich_fidx=7; AJSTAT_ok_pages=3; AJSTAT_ok_times=2; CNZZDATA3811623=cnzz_eid%3D253823549-1415164312-http%253A%252F%252Fwww.baidu.com%252F%26ntime%3D1415169712<br />DNT:1<br />Host:www.mmkao.com<br />User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36<br />Response Headersview source<br /><br />//通过相同的包装,并调用Httpwrap发送请求时,却提示超时,是在不知道哪里出问题........<br /><br />针对这个网站写了一个过滤出图片链接的类:<br /><br /><?php <br />class Parseimage<br />{<br /> private $responseBody=null;<br /> private $imgLink=null;<br /> private $pageNum=null;<br /> private header=null;<br /> private body=null;<br /> <br /> public function __construct($body)<br /> {<br /> $this->responseBody=$body;<br /> }<br /> //匹配图片src开始的链接地址<br /> public function feedImage()<br /> {<br /> $pat='#<img src="/static/imghwm/default1.png" data-src="(.*?)(?=" class="lazy" (.*?))#i';<br / alt="自定义HTTP抓包跟过滤" > if(preg_match_all($pat, $body, $match))<br /> {<br /> foreach($match[2] as $link)<br /> {<br /> $this->imgLink[]=$link;<br /> }<br /> }<br /> else<br /> {<br /> echo '匹配失败图片链接地址失败'."<br />";<br /> }<br /> }<br /> //提取head部分<br /> public function filterHeader($body)<br /> {<br /> $pat='#<head>[\s\S]+</head>#im';<br /> if(preg_match($pat, $body, $match))<br /> {<br /> $this->header=$match[0];<br /> }<br /> else<br /> {<br /> echo '匹配head部分失败'."<br />";<br /> }<br /> }<br /> //提取body部分<br /> public function filterBody($body)<br /> {<br /> $pat='#<body>[\s\S]+</body>#im';<br /> if(preg_match($pat, $body, $match))<br /> {<br /> $this->body=$match[0];<br /> }<br /> else<br /> {<br /> echo '匹配body部分失败'."<br />";<br /> }<br /> }<br /> //提取分页信息,这个只能针对性的匹配,不能通用<br /> public function rollPage($body)<br /> {<br /> $pat='#[\x{4e00}-\x{9fa5}]+\s*\d\s+?/\s+?\d+\s*[\x{4e00}-\x{9fa5}]*#ui';<br /> if(preg_match($pat, $body, $match))<br /> {<br /> $patNum='#/\s*(\d\d*)#';<br /> if(preg_match($patNum, $match[0], $num))<br /> {<br /> $this->pageNum=$num[1];<br /> }<br /> else<br /> {<br /> echo '提取分页具体值失败'."<br />";<br /> }<br /> }<br /> else<br /> {<br /> echo '提取分页统计失败'."<br />";<br /> }<br /> }<br /><br />?><br /><br /><br /><br />附注: 这两个类,,都通过了内网的测试,并成功过滤出图片的链接,但是给http://www.mmkao.com/Beautyleg/发送请求时,却提示超时,,不知道哪里出了问题。。。。。。<br /><br /><br /><br /><br />
------解决思路----------------------
$url = 'http://www.mmkao.com/Beautyleg/';<br />print_r(get_headers($url));
Array<br />(<br /> [0] => HTTP/1.1 200 OK<br /> [1] => Connection: close<br /> [2] => Date: Wed, 05 Nov 2014 08:53:09 GMT<br /> [3] => Content-Length: 13889<br /> [4] => Content-Type: text/html<br /> [5] => Content-Location: http://www.mmkao.com/Beautyleg/index.html<br /> [6] => Last-Modified: Wed, 05 Nov 2014 05:39:09 GMT<br /> [7] => Accept-Ranges: bytes<br /> [8] => ETag: "e8939ad2baf8cf1:693"<br /> [9] => Server: IIS<br /> [10] => X-Powered-By: WAF/2.0<br /> [11] => Set-Cookie: safedog-flow-item=8471BA510DA33350ED344AC374D3044A; expires=Sat, 12-Dec-2150 10:26:25 GMT; domain=mmkao.com; path=/<br />)<br /><br />

“你的组织要求你更改PIN消息”将显示在登录屏幕上。当在使用基于组织的帐户设置的电脑上达到PIN过期限制时,就会发生这种情况,在该电脑上,他们可以控制个人设备。但是,如果您使用个人帐户设置了Windows,则理想情况下不应显示错误消息。虽然情况并非总是如此。大多数遇到错误的用户使用个人帐户报告。为什么我的组织要求我在Windows11上更改我的PIN?可能是您的帐户与组织相关联,您的主要方法应该是验证这一点。联系域管理员会有所帮助!此外,配置错误的本地策略设置或不正确的注册表项也可能导致错误。即

Windows11将清新优雅的设计带到了最前沿;现代界面允许您个性化和更改最精细的细节,例如窗口边框。在本指南中,我们将讨论分步说明,以帮助您在Windows操作系统中创建反映您的风格的环境。如何更改窗口边框设置?按+打开“设置”应用。WindowsI转到个性化,然后单击颜色设置。颜色更改窗口边框设置窗口11“宽度=”643“高度=”500“>找到在标题栏和窗口边框上显示强调色选项,然后切换它旁边的开关。若要在“开始”菜单和任务栏上显示主题色,请打开“在开始”菜单和任务栏上显示主题

默认情况下,Windows11上的标题栏颜色取决于您选择的深色/浅色主题。但是,您可以将其更改为所需的任何颜色。在本指南中,我们将讨论三种方法的分步说明,以更改它并个性化您的桌面体验,使其具有视觉吸引力。是否可以更改活动和非活动窗口的标题栏颜色?是的,您可以使用“设置”应用更改活动窗口的标题栏颜色,也可以使用注册表编辑器更改非活动窗口的标题栏颜色。若要了解这些步骤,请转到下一部分。如何在Windows11中更改标题栏的颜色?1.使用“设置”应用按+打开设置窗口。WindowsI前往“个性化”,然

您是否在Windows安装程序页面上看到“出现问题”以及“OOBELANGUAGE”语句?Windows的安装有时会因此类错误而停止。OOBE表示开箱即用的体验。正如错误提示所表示的那样,这是与OOBE语言选择相关的问题。没有什么可担心的,你可以通过OOBE屏幕本身的漂亮注册表编辑来解决这个问题。快速修复–1.单击OOBE应用底部的“重试”按钮。这将继续进行该过程,而不会再打嗝。2.使用电源按钮强制关闭系统。系统重新启动后,OOBE应继续。3.断开系统与互联网的连接。在脱机模式下完成OOBE的所

任务栏缩略图可能很有趣,但它们也可能分散注意力或烦人。考虑到您将鼠标悬停在该区域的频率,您可能无意中关闭了重要窗口几次。另一个缺点是它使用更多的系统资源,因此,如果您一直在寻找一种提高资源效率的方法,我们将向您展示如何禁用它。不过,如果您的硬件规格可以处理它并且您喜欢预览版,则可以启用它。如何在Windows11中启用任务栏缩略图预览?1.使用“设置”应用点击键并单击设置。Windows单击系统,然后选择关于。点击高级系统设置。导航到“高级”选项卡,然后选择“性能”下的“设置”。在“视觉效果”选

在Windows11上的显示缩放方面,我们都有不同的偏好。有些人喜欢大图标,有些人喜欢小图标。但是,我们都同意拥有正确的缩放比例很重要。字体缩放不良或图像过度缩放可能是工作时真正的生产力杀手,因此您需要知道如何对其进行自定义以充分利用系统功能。自定义缩放的优点:对于难以阅读屏幕上的文本的人来说,这是一个有用的功能。它可以帮助您一次在屏幕上查看更多内容。您可以创建仅适用于某些监视器和应用程序的自定义扩展配置文件。可以帮助提高低端硬件的性能。它使您可以更好地控制屏幕上的内容。如何在Windows11

屏幕亮度是使用现代计算设备不可或缺的一部分,尤其是当您长时间注视屏幕时。它可以帮助您减轻眼睛疲劳,提高易读性,并轻松有效地查看内容。但是,根据您的设置,有时很难管理亮度,尤其是在具有新UI更改的Windows11上。如果您在调整亮度时遇到问题,以下是在Windows11上管理亮度的所有方法。如何在Windows11上更改亮度[10种方式解释]单显示器用户可以使用以下方法在Windows11上调整亮度。这包括使用单个显示器的台式机系统以及笔记本电脑。让我们开始吧。方法1:使用操作中心操作中心是访问

Windows上的激活过程有时会突然转向显示包含此错误代码0xc004f069的错误消息。虽然激活过程已经联机,但一些运行WindowsServer的旧系统可能会遇到此问题。通过这些初步检查,如果这些检查不能帮助您激活系统,请跳转到主要解决方案以解决问题。解决方法–关闭错误消息和激活窗口。然后,重新启动计算机。再次从头开始重试Windows激活过程。修复1–从终端激活从cmd终端激活WindowsServerEdition系统。阶段–1检查Windows服务器版本您必须检查您使用的是哪种类型的W


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver CS6
视觉化网页开发工具

Dreamweaver Mac版
视觉化网页开发工具

记事本++7.3.1
好用且免费的代码编辑器

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。