PHP读取其它动态网站内容~

    引用其它网站的表单,有验证码的,想到3种解决办法,有的方法并不适用希望能有所启发,先记录一下。如果有高手希望可以交流一下。QQ:11380628

 

1、AJAX
    使用jQuery的AJAX提交表单,js处理返回数据,但AJAX不支持跨域操作,连接时会出现确认框,有的服务器还不能运行,跨域问题暂时没有解决。代码如下:

<script type="text/javascript">
//文本中所有s2的值替换成s1
String.prototype.replaceAll = function(s1,s2) {
    return this.replace(new RegExp(s1,"gm"),s2);
}
//取得参数s1第s2次出现的位置
String.prototype.XindexOf = function(s1,s2) {
 var x = 0;
 var y = 0;
 for (i = 0; i < s2; i++){
  x=this.indexOf(s1,y);
  y=x+1;
 }
 return x;
}
$(function(){
 $.ajax({
  
url:'http://xxx/xxx.jsp'

  type: 'POST',
  data:'data1=<?=$_POST['data1'] ?>&'data2=<?=$_POST[''data2'] ?>',
  beforeSend: function(XMLHttpRequest){
   $("#display").html("<center>loading...</center>");
  },
  success: function(data){
   //alert(data);
   //if(data.indexOf("<!-- 文章正文 -->")!=-1)
   // alert("找到字符串1");
   //if(data.indexOf("<!-- 正文结束 -->")!=-1)
   // alert("找到字符串2");
   var ss = data.substring(data.indexOf("<!-- 文章正文 -->"), data.indexOf("<!-- 正文结束 -->"));   // 取子字符串。
   if(ss!=""){
    ss = ss.replaceAll("/image/","http://xxx/img/");
    ss = ss.replaceAll("yzm.jsp","http://xxx/yzm.jsp");
    var strX="<script";
    var strY="<\/script>";
    var script = data.substring(data.XindexOf(strX,2),data.XindexOf(strY,2)+strY.length);
    $("#display").html(script+ss);
    //alert(ss);
   }else{
    $("#display").html("<center>信息加载错误!</center>");
    history.back();
   }
   //document.getElementByIdx_x_x_x_x('display').innerHTML=data;
  },
  error: function(){
   $("#display").html("<center>信息加载错误!</center>");
  }
 });
});
</script>

 

2、iframe
   比较简单可以通过CSS处理得到的页面,挑出自己想要的部分,但是大小固定,不固定长宽的信息不好处理,想到隐藏iframe用js调出iframe中的内容,但查资料发现调用iframe中的数据也不支持跨域操作。代码如下:

<style type="text/css">
.jdscx_div{
 width:722px;
 height:880px;
 overflow:hidden;
 margin:0 auto 0 auto;
}
</style>
<div class="jdscx_div">
    <iframe src="
http://xxx/xxx.jsp?data1=<?=$_POST['data1'] ?>&data2=<?=$_POST['data2'] ?>" frameborder="1" marginheight="0" marginwidth="0" scrolling="yes" style="width:979px; height:1120px; margin-left:-258px; margin-top:-240px;"></iframe>
</div>

 

3、用PHP模似提交
    如果用PHP应该是最好的方式
    fsockopen的方式代码没有调试成功,获取验证码的地方遇到问题,可能是返回的图片格式不对,用资料里的方法获得的图片不能显示。
资料地址:http://www.cnblogs.com/wgw8299/archive/2010/10/29/1864596.html

    curl的方法调试成功,记录如下:

(1)表单页面:
$CookieFile=tempnam('./temp','tmp');
生成临时文件并返回目录。
<input type="hidden" name="cookie" id="cookie" value="<?=$CookieFile ?>" />

//提交临时目录,但这种方式不安全,我想把这个整到session里。
<img src="?img=true&cookie=<?=$CookieFile ?>" /> //取得验证码

 

(2)验证码文件,从服务器加载验证码,再传送给客户端,并把包括网页SESSIONID的信息保存在指定的文件中,之后要用这个信息与想链接的服务器确认SESSION信息。

<?php
$CookieFile = $_GET["cookie"];
$url = 'http://xxx/yzm.jsp';//验证码code
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_COOKIEJAR, $CookieFile);//把返回来的cookie信息保存在文件中
curl_exec($ch);
curl_close($ch);
exit();
?>

 

(3)提交页面
<?php
$CookieFile = $_POST["cookie"];
$p = "data1={$_POST['data1']}&data2={$_POST['data2']}";

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, "http://xxx/xxx.jsp");
curl_setopt($ch,CURLOPT_COOKIEFILE, $CookieFile);//同时发送Cookie
curl_setopt($ch,CURLOPT_COOKIEJAR, $CookieFile);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $p);//提交查询信息
$bs = curl_exec($ch);
echo $bs;//输出结果
curl_close($ch);
?>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值