引用其它网站的表单,有验证码的,想到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);
?>