扫荡这种很硬的网页不容易,特悬赏200分? 建议lz用Zend_Http,操作起来比较方便以下是手册http://framework.zend.com/manual/zh/zend.http.html 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主可以下载个监视的软件,自己像操作网页那样,提交一次表单,然后截取那个请求,看看请求的真实样子,按照这个样子创建一个HTTP头。 我下载了一个软件叫:HTTP Analyzer V2, 能偷看POST出去的数据,对解决本题目是否有帮助,正在研究中,不过首先要感谢777! 经过用 HTTP Analyzer V2 的分析,POST的数据包含一个名叫ASP.NET_SessionId的Cookie和在界面是隐藏属性的几十k大小的文本。<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="很大"><input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="很大">所以写了如下的分析文件,模仿在浏览器输入网址,然后点击表中的view按钮:<?php$data=""; // 保存各参数组合$html_1=""; // 返回的网页保存于此$fp = fsockopen("info.vcbs.com.vn", 80, $errno, $errstr);if ($fp){ $write = "GET /English/MarketInformation/StockQuotesBySession.aspx HTTP/1.1\r\n"; $write .= "Host: info.vcbs.com.vn\r\n"; $write .= "Connection: Close\r\n\r\n"; fwrite($fp, $write); while(!feof($fp)) { $html_1 .= fgets($fp, 128); } fclose($fp);}// 上述的代码是获取默认状态下(即今天)的网页$str="ASP.NET_SessionId="; // 取cookie的关键词$cookie_str="Cookie: ".$str; // 组成cookie字符串,供后面使用$html_2=strchr($html_1,$str); // 扫描ASP.NET_SessionId=关键词$pos=strpos($html_2,';'); // 扫描结束符$len=strlen($str); // 得到长度$cookie_str.=substr($html_2,$len,$pos-$len); // 组成cookie字符串,供后面使用echo "[".$cookie_str."]<br>"; // 输出这句cookie//$data = "__EVENTTARGET=&__EVENTARGUMENT=&"; // 两个空的参数$str = "__VIEWSTATE"; // 扫描这个关键词$data .= $str."="; // 将关键词合并到参数中$html_2=strchr($html_1,$str); // 扫描关键词$str = 'value="'; // 再次扫描关键词后的value=字样$html_1=strchr($html_2,$str); // html_1,html_2轮流使用,缩小长度$html_2=substr($html_1,strlen($str)); // 去掉关键词后的字符串$pos=strpos($html_2,'"'); // 找到value的结尾$data .= substr($html_2,0,$pos); // 找到__VIEWSTATE的值$data .= "&ctl00\$Header1\$keywords=";$data .= "&ctl00\$PageContent\$ToDay=20&ctl00\$PageContent\$ToMonth=1&ctl00\$PageContent\$ToYear=2009";$data .= "&ctl00\$PageContent\$Button1=View&ctl00\$Header1\$keywords=";$str = "__EVENTVALIDATION"; // 后面是寻找____EVENTVALIDATION的值$html_1=strchr($html_2,$str);$str = 'value="';$html_2=strchr($html_1,$str);$html_1=substr($html_2,strlen($str));$pos=strpos($html_1,'"');$data .= substr($html_1,0,$pos);$data .= "\r\n\r\n"; // 参数值结束$fp = fsockopen("info.vcbs.com.vn", 80, $errno, $errstr);$html_1=""; // 网页清空,准备接收新网页if ($fp){ $write = "POST /English/MarketInformation/StockQuotesBySession.aspx HTTP/1.1\r\n"; $write .= "Host: info.vcbs.com.vn\r\n"; $write .= "Content-Type:application/x-www-form-urlencoded\r\n"; $write .= "Referer: http://info.vcbs.com.vn/English/MarketInformation/StockQuotesBySession.aspx\r\n"; $write .= "Content-Length:".strlen($data)."\r\n"; $write .= $cookie_str."\r\n"; $write .= "Connection: Close\r\n\r\n"; $write .= $data; fwrite($fp, $write); while(!feof($fp)) { $html_1 .= fgets($fp, 128); } fclose($fp);}echo $html_1; // 输出后面得到的网页?>但是运行后还是被跳转了,请教高手! 楼主有没有看看PHP发送的HTTP请求与正常操作的是否相同?? 我是将php文件上载到服务器上执行的,所以看不到自己POST出去的数据,应该在自己本机装一个PHP解释器,通过localhost运行上面的文件。 请问一下777:为什么我只能使用Connection: Close\r\n\r\n据说可以使用Connection: Keep Alive\r\n\r\n,但是如果我的网页这么写,读取网页一直不结束,不知道什么原因? Connection: Keep-Alive\r\n\r\n中间有一杠 $write .= "POST /English/MarketInformation/StockQuotesBySession.aspx HTTP/1.1\r\n";$write .= "Host: info.vcbs.com.vn\r\n";$write .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3\r\n";$write .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";$write .= "Accept-Language: zh-cn,zh;q=0.5\r\n";$write .= "Accept-Encoding: gzip,deflate\r\n";$write .= "Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7\r\n";$write .= "Keep-Alive: 300\r\n";$write .= "Connection: keep-alive\r\n";$write .= "Referer: http://info.vcbs.com.vn/English/MarketInformation/StockQuotesBySession.aspx\r\n";$write .= "Cookie: __utma=245029981.1371710382874126600.1232906884.1232906884.1232906884.1; __utmz=245029981.1232906884.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ASP.NET_SessionId=b5r4cjjy2nkf5455hsnvxt45\r\n";$write .= "Content-Type: application/x-www-form-urlencoded\r\n";$write .= "Content-Length: 45083\r\n\r\n"; 这是我通过firefox的一个组件获取的头部信息的字符串(,经过测试,是可以正常获取网页内容的,它的POST参数有些长,也可能很多用不上,但是太长了,没法发上来,我想你获取失败的原因应该是http协议要求的有些参数没有传过去,希望对你有所帮助。 关键点应该是这个:$write .= "Cookie: __utma=245029981.1371710382874126600.1232906884.1232906884.1232906884.1; __utmz=245029981.1232906884.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ASP.NET_SessionId=b5r4cjjy2nkf5455hsnvxt45\r\n"; 并且是动态的,要通过第一次的访问结果提取。 看来还要模拟第一次访问的结果,提取Cookie,然后再发一次请求,发送刚获取的Cookie值,才可以模拟。 可能是记录密码和用户名的吧,像Discuz那种登录机制。 1、在浏览器直接输入:http://info.vcbs.com.vn/English/MarketInformation/StockQuotesBySession.aspx 通过Http analyzer 监测得到如下的头:(Request-Line):GET /English/MarketInformation/StockQuotesBySession.aspx HTTP/1.1Accept:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*Accept-Language:zh-cnUA-CPU:x86Accept-Encoding:gzip, deflateUser-Agent:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)Host:info.vcbs.com.vnConnection:Keep-Alive2、Cookie只有一个:ASP.NET_SessionId ok3aqirmsvg52k55hm3lry45 3、楼上看到的cookie: __utmb=17226283, 好像这是CSDN的cookie4、通过网页修改日期,点击view后,检查头的结果是:(Request-Line):POST /English/MarketInformation/StockQuotesBySession.aspx HTTP/1.1Accept:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*Referer:http://info.vcbs.com.vn/English/MarketInformation/StockQuotesBySession.aspxAccept-Language:zh-cnContent-Type:application/x-www-form-urlencodedUA-CPU:x86Accept-Encoding:gzip, deflateUser-Agent:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)Host:info.vcbs.com.vnContent-Length:45083Connection:Keep-AliveCache-Control:no-cacheCookie:ASP.NET_SessionId=ok3aqirmsvg52k55hm3lry455、检查POST的数据:__EVENTTARGET=__EVENTARGUMENT=__VIEWSTATE=/wEPDwUJMjA0ODM2NDAzD2QWAmYPZBYCAgMPZBYEAgEPZBYYAgUPDxYCHgRUZXh0BQQxOTYwZGQCBw8PFgIfAAUJMS8yMy8yMDA5ZGQCCQ8PFgIfAAUGMzAzLjIxZGQCCw8PFgIfAAVBIDxmb250IGNvbG9yPSMwMDAwRkY+JiM5NjUwPC9mb250Pjxmb250IGNvbG9yPSMwMDAwRkY+Mi4wOTwvZm9udD5kZAINDw8WAh8ABSIgPGZvbnQgY29s...ctl00$Header1$keywords=ctl00$PageContent$ToDay=26ctl00$PageContent$ToMonth=1ctl00$PageContent$ToYear=2009ctl00$PageContent$Button1=View__EVENTVALIDATION=/wEWOgLg7qzjBQKk4KTTBAKttMKDAwKX74GzBwLQnfbWBALRnfbWBALSnfbWBALTnfbWBALUnfbWBALVnfbWBALWnfbWBALHnfbWBALInfbWBALQnbbVBALQnbrVBALQnb7VBALQnYLVBALQnYbVBALQnYrVBALQnY7VBALQnZLVBALQndbWBALQndrWBALRnbbVBALRnbrVBALRnb7VBALRnYLVBALRnYbVBALRnYrVBALRnY7VBALRnZLVBALR...整个POST过去的数据应该是45083大小,上面的复制已经截断了。 __VIEWSTATE__EVENTVALIDATION这两个参数是很大的。有意思,一定要啃下这个网页! 好像问题在于:在很大的数据中存在加号,如果从表单里面,可以把加号post过去,但是自己填头部是,加号会当作空格处理。不知道谁能解决这个问题? 以下代码可以使用,要点就是将+改成%2B,同时还有几个小错误,仅供参考:<?php$data=""; // 保存各参数组合$html_1=""; // 返回的网页保存于此$fp = fsockopen("info.vcbs.com.vn", 80, $errno, $errstr);if ($fp){ $write = "GET /English/MarketInformation/StockQuotesBySession.aspx HTTP/1.1\r\n"; $write .= "Host: info.vcbs.com.vn\r\n"; $write .= "Connection: Close\r\n\r\n"; fwrite($fp, $write); while(!feof($fp)) { $html_1 .= fgets($fp, 128); } fclose($fp);}// 上述的代码是获取默认状态下(即今天)的网页$str="ASP.NET_SessionId="; // 取cookie的关键词$cookie_str="Cookie: ".$str; // 组成cookie字符串,供后面使用$html_2=strchr($html_1,$str); // 扫描ASP.NET_SessionId=关键词$pos=strpos($html_2,';'); // 扫描结束符$len=strlen($str); // 得到长度$cookie_str.=substr($html_2,$len,$pos-$len); // 组成cookie字符串,供后面使用//echo "[".$cookie_str."]<br>"; // 输出这句cookie//$data = "__EVENTTARGET=&__EVENTARGUMENT=&"; // 两个空的参数$str = "__VIEWSTATE"; // 扫描这个关键词$data .= $str."="; // 将关键词合并到参数中$html_2=strchr($html_1,$str); // 扫描关键词$str = 'value="'; // 再次扫描关键词后的value=字样$html_1=strchr($html_2,$str); // html_1,html_2轮流使用,缩小长度$html_2=substr($html_1,strlen($str)); // 去掉关键词后的字符串$pos=strpos($html_2,'"'); // 找到value的结尾//echo "[len1=".$pos."]<br>"; // 输出这句cookie$str=str_replace('+','%2B',substr($html_2,0,$pos)); // 将加号换成 %2B$data .= $str; // 找到__VIEWSTATE的值$data .= "&ctl00\$Header1\$keywords=";$data .= "&ctl00\$PageContent\$ToDay=20&ctl00\$PageContent\$ToMonth=1&ctl00\$PageContent\$ToYear=2009";$data .= "&ctl00\$PageContent\$Button1=View&";$str = "__EVENTVALIDATION"; // 后面是寻找____EVENTVALIDATION的值$data .= $str."=";$html_1=strchr($html_2,$str);$str = 'value="';$html_2=strchr($html_1,$str);$html_1=substr($html_2,strlen($str));$pos=strpos($html_1,'"');//echo "[len2=".$pos."]<br>"; // 输出这句cookie$str=str_replace('+','%2B',substr($html_1,0,$pos)); // 将加号换成 %2B$data .= $str;$data .= "\r\n\r\n"; // 参数值结束//echo "[".strlen($data)."]<br>"; // 输出这句cookie$fp = fsockopen("info.vcbs.com.vn", 80, $errno, $errstr);$html_1=""; // 网页清空,准备接收新网页if ($fp){ $write = "POST /English/MarketInformation/StockQuotesBySession.aspx HTTP/1.1\r\n"; $write .= "Host: info.vcbs.com.vn\r\n"; $write .= "Content-Type:application/x-www-form-urlencoded\r\n"; $write .= "Referer: http://info.vcbs.com.vn/English/MarketInformation/StockQuotesBySession.aspx\r\n"; $write .= "Content-Length:".strlen($data)."\r\n"; $write .= $cookie_str."\r\n"; $write .= "Connection: Close\r\n\r\n"; $write .= $data; fwrite($fp, $write); while(!feof($fp)) { $html_1 .= fgets($fp, 128); } fclose($fp);}echo $html_1; // 输出后面得到的网页?> 最简单的 ASP.NET 网页只有几个主要参数,其它都是.NET自动加上去的用curl , HTTP_Client 之类的都可以很容易取得完全没反复制代码可以说是抽取难度最低的网页之一 核心就是这个函数:$fp = fsockopen("info.vcbs.com.vn", 80, $errno, $errstr);好好查查用法。 这个一个asp.net的webform,你注意一下form里的hidden类型的input,这几个在asp.net处理webform时会用到,如果这些字段的验证通不过,就会出现页面不能正常访问的 Cookies经常莫名其妙的消失。请PHP高手解答~~~ 截取字符串 var_dump(in_array('兽兽', range(0, 9))); session的问题 session id问题 字符串数组处理 PHP连接不上数据库的问题 在线等!!!关于读出文本库时换行的问题 是否APACHE不支持中文目錄與文件名呢? PHP文件包含的问题 请问这段有什么语法错误 如何用 PHP 对文本文件进行筛选式修改?具体内容见文章,谢谢!
我下载了一个软件叫:HTTP Analyzer V2, 能偷看POST出去的数据,对解决本题目是否有帮助,正在研究中,不过首先要感谢777!
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="很大">所以写了如下的分析文件,模仿在浏览器输入网址,然后点击表中的view按钮:
<?php
$data=""; // 保存各参数组合
$html_1=""; // 返回的网页保存于此
$fp = fsockopen("info.vcbs.com.vn", 80, $errno, $errstr);
if ($fp)
{
$write = "GET /English/MarketInformation/StockQuotesBySession.aspx HTTP/1.1\r\n";
$write .= "Host: info.vcbs.com.vn\r\n";
$write .= "Connection: Close\r\n\r\n";
fwrite($fp, $write);
while(!feof($fp))
{
$html_1 .= fgets($fp, 128);
}
fclose($fp);
}
// 上述的代码是获取默认状态下(即今天)的网页
$str="ASP.NET_SessionId="; // 取cookie的关键词
$cookie_str="Cookie: ".$str; // 组成cookie字符串,供后面使用
$html_2=strchr($html_1,$str); // 扫描ASP.NET_SessionId=关键词
$pos=strpos($html_2,';'); // 扫描结束符
$len=strlen($str); // 得到长度
$cookie_str.=substr($html_2,$len,$pos-$len); // 组成cookie字符串,供后面使用
echo "[".$cookie_str."]<br>"; // 输出这句cookie
//
$data = "__EVENTTARGET=&__EVENTARGUMENT=&"; // 两个空的参数
$str = "__VIEWSTATE"; // 扫描这个关键词
$data .= $str."="; // 将关键词合并到参数中
$html_2=strchr($html_1,$str); // 扫描关键词
$str = 'value="'; // 再次扫描关键词后的value=字样
$html_1=strchr($html_2,$str); // html_1,html_2轮流使用,缩小长度
$html_2=substr($html_1,strlen($str)); // 去掉关键词后的字符串
$pos=strpos($html_2,'"'); // 找到value的结尾
$data .= substr($html_2,0,$pos); // 找到__VIEWSTATE的值
$data .= "&ctl00\$Header1\$keywords=";
$data .= "&ctl00\$PageContent\$ToDay=20&ctl00\$PageContent\$ToMonth=1&ctl00\$PageContent\$ToYear=2009";
$data .= "&ctl00\$PageContent\$Button1=View&ctl00\$Header1\$keywords=";
$str = "__EVENTVALIDATION"; // 后面是寻找____EVENTVALIDATION的值
$html_1=strchr($html_2,$str);
$str = 'value="';
$html_2=strchr($html_1,$str);
$html_1=substr($html_2,strlen($str));
$pos=strpos($html_1,'"');
$data .= substr($html_1,0,$pos);
$data .= "\r\n\r\n"; // 参数值结束
$fp = fsockopen("info.vcbs.com.vn", 80, $errno, $errstr);
$html_1=""; // 网页清空,准备接收新网页
if ($fp)
{
$write = "POST /English/MarketInformation/StockQuotesBySession.aspx HTTP/1.1\r\n";
$write .= "Host: info.vcbs.com.vn\r\n";
$write .= "Content-Type:application/x-www-form-urlencoded\r\n";
$write .= "Referer: http://info.vcbs.com.vn/English/MarketInformation/StockQuotesBySession.aspx\r\n";
$write .= "Content-Length:".strlen($data)."\r\n";
$write .= $cookie_str."\r\n";
$write .= "Connection: Close\r\n\r\n";
$write .= $data;
fwrite($fp, $write);
while(!feof($fp))
{
$html_1 .= fgets($fp, 128);
}
fclose($fp);
}
echo $html_1; // 输出后面得到的网页
?>
但是运行后还是被跳转了,请教高手!
我是将php文件上载到服务器上执行的,所以看不到自己POST出去的数据,应该在自己本机装一个PHP解释器,通过localhost运行上面的文件。
看来还要模拟第一次访问的结果,提取Cookie,然后再发一次请求,发送刚获取的Cookie值,才可以模拟。
http://info.vcbs.com.vn/English/MarketInformation/StockQuotesBySession.aspx
通过Http analyzer 监测得到如下的头:(Request-Line):GET /English/MarketInformation/StockQuotesBySession.aspx HTTP/1.1
Accept:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language:zh-cn
UA-CPU:x86
Accept-Encoding:gzip, deflate
User-Agent:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
Host:info.vcbs.com.vn
Connection:Keep-Alive2、Cookie只有一个:ASP.NET_SessionId ok3aqirmsvg52k55hm3lry45 3、楼上看到的cookie: __utmb=17226283, 好像这是CSDN的cookie4、通过网页修改日期,点击view后,检查头的结果是:(Request-Line):POST /English/MarketInformation/StockQuotesBySession.aspx HTTP/1.1
Accept:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer:http://info.vcbs.com.vn/English/MarketInformation/StockQuotesBySession.aspx
Accept-Language:zh-cn
Content-Type:application/x-www-form-urlencoded
UA-CPU:x86
Accept-Encoding:gzip, deflate
User-Agent:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
Host:info.vcbs.com.vn
Content-Length:45083
Connection:Keep-Alive
Cache-Control:no-cache
Cookie:ASP.NET_SessionId=ok3aqirmsvg52k55hm3lry455、检查POST的数据:__EVENTTARGET=
__EVENTARGUMENT=
__VIEWSTATE=/wEPDwUJMjA0ODM2NDAzD2QWAmYPZBYCAgMPZBYEAgEPZBYYAgUPDxYCHgRUZXh0BQQxOTYwZGQCBw8PFgIfAAUJMS8yMy8yMDA5ZGQCCQ8PFgIfAAUGMzAzLjIxZGQCCw8PFgIfAAVBIDxmb250IGNvbG9yPSMwMDAwRkY+JiM5NjUwPC9mb250Pjxmb250IGNvbG9yPSMwMDAwRkY+Mi4wOTwvZm9udD5kZAINDw8WAh8ABSIgPGZvbnQgY29s...
ctl00$Header1$keywords=
ctl00$PageContent$ToDay=26
ctl00$PageContent$ToMonth=1
ctl00$PageContent$ToYear=2009
ctl00$PageContent$Button1=View
__EVENTVALIDATION=/wEWOgLg7qzjBQKk4KTTBAKttMKDAwKX74GzBwLQnfbWBALRnfbWBALSnfbWBALTnfbWBALUnfbWBALVnfbWBALWnfbWBALHnfbWBALInfbWBALQnbbVBALQnbrVBALQnb7VBALQnYLVBALQnYbVBALQnYrVBALQnY7VBALQnZLVBALQndbWBALQndrWBALRnbbVBALRnbrVBALRnb7VBALRnYLVBALRnYbVBALRnYrVBALRnY7VBALRnZLVBALR...整个POST过去的数据应该是45083大小,上面的复制已经截断了。
这两个参数是很大的。
有意思,一定要啃下这个网页!
<?php$data=""; // 保存各参数组合
$html_1=""; // 返回的网页保存于此
$fp = fsockopen("info.vcbs.com.vn", 80, $errno, $errstr);
if ($fp)
{
$write = "GET /English/MarketInformation/StockQuotesBySession.aspx HTTP/1.1\r\n";
$write .= "Host: info.vcbs.com.vn\r\n";
$write .= "Connection: Close\r\n\r\n";
fwrite($fp, $write);
while(!feof($fp))
{
$html_1 .= fgets($fp, 128);
}
fclose($fp);
}
// 上述的代码是获取默认状态下(即今天)的网页
$str="ASP.NET_SessionId="; // 取cookie的关键词
$cookie_str="Cookie: ".$str; // 组成cookie字符串,供后面使用
$html_2=strchr($html_1,$str); // 扫描ASP.NET_SessionId=关键词
$pos=strpos($html_2,';'); // 扫描结束符
$len=strlen($str); // 得到长度
$cookie_str.=substr($html_2,$len,$pos-$len); // 组成cookie字符串,供后面使用
//echo "[".$cookie_str."]<br>"; // 输出这句cookie
//
$data = "__EVENTTARGET=&__EVENTARGUMENT=&"; // 两个空的参数
$str = "__VIEWSTATE"; // 扫描这个关键词
$data .= $str."="; // 将关键词合并到参数中
$html_2=strchr($html_1,$str); // 扫描关键词
$str = 'value="'; // 再次扫描关键词后的value=字样
$html_1=strchr($html_2,$str); // html_1,html_2轮流使用,缩小长度
$html_2=substr($html_1,strlen($str)); // 去掉关键词后的字符串
$pos=strpos($html_2,'"'); // 找到value的结尾
//echo "[len1=".$pos."]<br>"; // 输出这句cookie
$str=str_replace('+','%2B',substr($html_2,0,$pos)); // 将加号换成 %2B
$data .= $str; // 找到__VIEWSTATE的值
$data .= "&ctl00\$Header1\$keywords=";
$data .= "&ctl00\$PageContent\$ToDay=20&ctl00\$PageContent\$ToMonth=1&ctl00\$PageContent\$ToYear=2009";
$data .= "&ctl00\$PageContent\$Button1=View&";
$str = "__EVENTVALIDATION"; // 后面是寻找____EVENTVALIDATION的值
$data .= $str."=";
$html_1=strchr($html_2,$str);
$str = 'value="';
$html_2=strchr($html_1,$str);
$html_1=substr($html_2,strlen($str));
$pos=strpos($html_1,'"');
//echo "[len2=".$pos."]<br>"; // 输出这句cookie
$str=str_replace('+','%2B',substr($html_1,0,$pos)); // 将加号换成 %2B
$data .= $str;
$data .= "\r\n\r\n"; // 参数值结束
//echo "[".strlen($data)."]<br>"; // 输出这句cookie$fp = fsockopen("info.vcbs.com.vn", 80, $errno, $errstr);
$html_1=""; // 网页清空,准备接收新网页
if ($fp)
{
$write = "POST /English/MarketInformation/StockQuotesBySession.aspx HTTP/1.1\r\n";
$write .= "Host: info.vcbs.com.vn\r\n";
$write .= "Content-Type:application/x-www-form-urlencoded\r\n";
$write .= "Referer: http://info.vcbs.com.vn/English/MarketInformation/StockQuotesBySession.aspx\r\n";
$write .= "Content-Length:".strlen($data)."\r\n";
$write .= $cookie_str."\r\n";
$write .= "Connection: Close\r\n\r\n";
$write .= $data;
fwrite($fp, $write);
while(!feof($fp))
{
$html_1 .= fgets($fp, 128);
}
fclose($fp);
}
echo $html_1; // 输出后面得到的网页
?>
只有几个主要参数,其它都是.NET自动加上去的用curl , HTTP_Client 之类的都可以很容易取得
完全没反复制代码可以说是抽取难度最低的网页之一
$fp = fsockopen("info.vcbs.com.vn", 80, $errno, $errstr);
好好查查用法。