要用fsockopen POST信息,并抓取结果,可是失败~~ 1、sock函数不能直接穿过代理2、你有$out .= "Content-Length: 796\r\n";但未见只796字节的内容 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <?php$fp = fsockopen("www.ctrip.com", 80, $errno, $errstr, 80);if (!$fp) { echo "$errstr ($errno)";} else { $out = "POST /superet/Flight/SuperFlightSearchResult.asp HTTP/1.1\r\n"; $out .= "Host: www.ctrip.com\r\n"; $out .= "Accept: */*\r\n"; $out .= "Accept-Language: zh-cn\r\n"; $out .= "Content-Type: application/x-www-form-urlencoded\r\n"; $out .= "Accept-Encoding: gzip, deflate\r\n"; $out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.40607)\r\n"; $out .= "Content-Length: 35\r\n"; $out .= "Cache-Control: no-cache\r\n"; $out .= "\r\ncurDate=2005-6-24&FlightWay1=Single\r\n\r\n"; fputs($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp);}?> POST方法下post参数的内容前面后面都要\r\n,content-length应该是post参数的长度。 还有php的fsocket读asp的输出有问题估计是因为eof的定义不一样php.ini里面有一个设置是自动判断eof的,打开看看 用fsockopen POST信息可以得到结果??第一次听说哦。。严重关注中 哈哈~~~现在问题居然解决啦~~不过不是你们所说的问题,其实我也不清楚怎么解决的~~不知道自己哪里改动了一下,突然就好了~~~to xuzuning(唠叨):"curDate=2005-6-24&FlightWay1=Single" 我贴上来的不完整,所以Content-Length:参数没有修改~小小的疏忽~~呵呵~~to icewolf_li(冰狼):你写的不错,post数据和head数据之间的确必须要加 "两个\r\n" ,不过post数据末尾的"两个\r\n"不是必须的~~~to syre(神仙) :事实证明,读asp的输出是没有问题的~可以放心啦~~to keaizhong(可爱钟) :sock 相当于代替了浏览器和服务器交互的过程,fsockopen这个函数很有用哦~~你可以研究一下~哈哈另外我发现有时候可以分两次fputs信息,第一次是发送head信息,第二次是发送post信息,之间可以用一个函数 usleep(10) ,因为我发现IE浏览器就是分两次提交的,不知道是为什么要这样?????????????????????;当然我现在一次性提交head信息和post信息暂时也成功了。 还有,最好把这句去掉~$out .= "Accept-Encoding: gzip, deflate\r\n";不然,有时会是乱码这是代表Gzip服务端压缩后传给客户端的,只要去掉客户端的gzip请求,服务端就不再压缩了。而是以纯文本方式传送。 php中判断 求php与javascript做一个效果!!!!!! 求教linux下的文本编辑器 帮帮忙,看这个问题怎么解决 数据库SQL语句 单引号 双引号 怎么用 ◆◆ 请高手谈谈分词技术用PHP+MySQL是如何实现的! ◆◆ 如何判断上传的文件是文本文件? 人都要疯了,老大们,帮帮忙吧!!!!!!!!!! 我一会要去应聘PHP程序员,谁能教点临阵磨枪的东西?(原来是搞asp的) php中如何实现SELECT按照点选顺序显示选项 【程序发布】基本图像处理类V1.6,欢迎大家测试 南京web网站开发工作机会(全职、兼职)
$fp = fsockopen("www.ctrip.com", 80, $errno, $errstr, 80);
if (!$fp) {
echo "$errstr ($errno)";
} else {
$out = "POST /superet/Flight/SuperFlightSearchResult.asp HTTP/1.1\r\n";
$out .= "Host: www.ctrip.com\r\n";
$out .= "Accept: */*\r\n";
$out .= "Accept-Language: zh-cn\r\n";
$out .= "Content-Type: application/x-www-form-urlencoded\r\n";
$out .= "Accept-Encoding: gzip, deflate\r\n";
$out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.40607)\r\n";
$out .= "Content-Length: 35\r\n";
$out .= "Cache-Control: no-cache\r\n";
$out .= "\r\ncurDate=2005-6-24&FlightWay1=Single\r\n\r\n";
fputs($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
估计是因为eof的定义不一样
php.ini里面有一个设置是自动判断eof的,打开看看
第一次听说哦。。
严重关注中
"curDate=2005-6-24&FlightWay1=Single" 我贴上来的不完整,所以Content-Length:参数没有修改~小小的疏忽~~呵呵~~
to icewolf_li(冰狼):
你写的不错,post数据和head数据之间的确必须要加 "两个\r\n" ,不过post数据末尾的"两个\r\n"不是必须的~~~
to syre(神仙) :
事实证明,读asp的输出是没有问题的~可以放心啦~~to keaizhong(可爱钟) :
sock 相当于代替了浏览器和服务器交互的过程,fsockopen这个函数很有用哦~~你可以研究一下~哈哈
另外我发现有时候可以分两次fputs信息,第一次是发送head信息,第二次是发送post信息,之间可以用一个函数 usleep(10) ,因为我发现IE浏览器就是分两次提交的,不知道是为什么要这样?????????????????????;当然我现在一次性提交head信息和post信息暂时也成功了。
$out .= "Accept-Encoding: gzip, deflate\r\n";不然,有时会是乱码这是代表Gzip服务端压缩后传给客户端的,只要去掉客户端的gzip请求,服务端就不再压缩了。而是以纯文本方式传送。