`
y806839048
  • 浏览: 1119794 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

用代理避免ajax跨域请求(手机验证码)

 
阅读更多
http://wenku.baidu.com/link?url=90oerGKwoYpsenwmAiQQtWtzAKFKYV33Ob8IMtXLtmKDdSdEsuRjVh7WrWrH29wgNTXAtiROvl6HB_049Er3HBpZyE2PhwDAvojzcUhjeqO

1,URL中中文部分编码
2,有&会被截断解决URL参数中带&连接符参数被截断问题
http://jingyan.baidu.com/article/48b37f8d7870df1a6464888d.html
下面举例JS的方法:a=encodeURIComponent(12&34)&b=56尤其适用于用ajax向动态脚本传递的时候。这样,脚本在取参数的时候,就不会被截断了。// NET 编码HttpUtility.UrlEncode(URL);


jsp
<%@ page language="java" pageEncoding="UTF-8" %>
<%
    String webPath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
    String path = request.getContextPath();
    webPath += path;
%>
<!DOCTYPE html >
<html >
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>员福云</title>
    <link href="<%=webPath%>/resourses/css/common.css" rel="stylesheet" type="text/css"/>
    <link href="<%=webPath%>/resourses/css/style.css" rel="stylesheet" type="text/css"/>
     <script src="<%=webPath%>/resourses/js/jquery-1.8.3.min.js" type="text/javascript"></script>
    <script src="<%=webPath%>/resourses/js/My97DatePicker/WdatePicker.js" type="text/javascript"></script>
    <script src="<%=webPath%>/resourses/js/custome.js" type="text/javascript"></script>
    <script src="<%=webPath%>/resourses/js/jquery.pagination.js" type="text/javascript"></script>
    <script src="<%=webPath%>/resourses/js/pagination-ext.js" type="text/javascript"></script>
</head>
<body>
<div class="main_con">
    <h3 class="rt_cont noPrint"><span>当前位置 : </span><a href="<%=webPath%>/supplier/securityCenter/index.do">绑定手机</a> <input
            type="button" class="btn_fh" value="< 返 回"
            onclick="location.href='<%=webPath%>/supplier/securityCenter/index.do'"/></h3>

    <div class="mc_tent" id="printDiv">
        <div class="con_tent" align="center">
            <table class="feedback">
                <tr align="center">
                    <th colspan="2" class="fbk_th" align="center"><div align="center">我们不会泄露您的手机信息</div></th>
                </tr>
                <tr align="center">
                    <td class="fbk_lf" align="right" width="50%"><div align="right">国家/地区:</div></td>
                    <td align="left" width="50%"><div align="left">
                    <select >
                    <option value="0" selected="selected">===请选择===</option>
                      <option value="zg" >中国</option>
                      <option value="yg" >英国</option>
                      <option value="fg" >法国</option>
                     </select>
                     </div>
                     </td>
                </tr>
                <tr align="center">
                    <td class="fbk_lf" align="right" width="50%"><div align="right">手机号: +86</div></td>
                    <td align="left" width="50%"><div align="left"><input type="text" id="mobile"></div></td>
                </tr>
                <tr align="center" align="center">
                    <td class="fbk_lf" colspan="2" align="center"><div align="center"><input type="button" id="hqyzm" value="免费获取验证码" ></div></td>
                   
                </tr>
                <tr align="center" align="center">
                    <td class="fbk_lf" align="right" width="50%"><div align="right">验证码:</div></td>
                    <td align="left" width="50%"><div align="left"><input type="text" id="yzm"></div></td>
                </tr>
                <tr >
                    <td class="fbk_lf" colspan="2"><div align="center"><input type="button" id="qd" value="确定"></div></td>
                </tr>

            </table>

        </div>
    </div>
</div>
<div class="clear"></div>
<script type="text/javascript" >

$(function() {


var yzdata;
$("#qd").unbind();
$("#qd").bind("click",function() {
var gj= $("select").val();
var mobile =$("#mobile").val();
var yzm = $("#yzm").val();
if(yzdata==yzm){
  eventdata=[];
   eventdata.push({
  mobilePhone:mobile
   });
   var ndata={
  mobilePhone:mobile,
  yzm:yzm
   };
    $.ajax({

            type: "post",
            url: "<%=webPath%>/system/users/savemobile.do",
            data: ndata,
            dataType: "json",
            success: function (data) {
                if (data = 1) {
                alert("绑定成功,谢谢!");
                } else if (data = 0) {
                    alert("操作失败,该记录可能已不存在。");
                } else if (data > 1) {
                    alert("错误,有多条记录被删除。");
                }
            },
            error: function (textStatus) {
                alert("数据加载失败!!!");
            }
});
}else{
alert("请填写正确的信息!");
}
});
var url="http://10.1.67.253:8080/wondersSMS/getToken?sid=yfy&secret=406629b12c904b8c80c0c1263f37cb97";
var a=encodeURIComponent(url);
$("#hqyzm").unbind();
$("#hqyzm").bind("click",function() {
$.ajax({
type:"post",
            url: "<%=webPath%>/system/users/msg.do?url="+a,
            dataType: "json",
            success: function (data) {
                jsonpCallback(data.token);
            },
            error: function (r) {
            console.log(r);
            }
        });

});
function jsonpCallback(token) { 
var mobile =$("#mobile").val();
var taskid=getFormatDate();
yzdata =random();
var content="尊敬的用户您好,您本次的验证码为"+yzdata;
var url="http://10.1.67.253:8080/wondersSMS/sendSMS?content="+encodeURI(content)///url中注意中文部分编码+"&phonelist="+mobile+"&taskId="+taskid+"&token="+token+"&sid=yfy";
        var a=encodeURIComponent(url);
        $.ajax({
type:"post",
            url: "<%=webPath%>/system/users/msg.do?url="+a,
            dataType: "json",
            success: function (data) {
            },
            error: function (r) {
            console.log(r);
            }
        });
    } 

});


function random() {
return Math.round(Math.random()*99999)+100000;
}

function getFormatDate()
{
   var day=new Date();
   var Year=0;
   var Month=0;
   var Day=0;
   var Hour = 0;
   var Minute = 0;
   var Second = 0;
   var CurrentDate="";
   //初始化时间
   Year       = day.getFullYear();
   Month      = day.getMonth()+1;
   Day        = day.getDate();
   Hour       = day.getHours();
   Minute     = day.getMinutes();
   Second     = day.getSeconds();
 
   CurrentDate = Year;
   if (Month >= 10 )
   {
    CurrentDate = CurrentDate + Month ;
   }
   else
   {
    CurrentDate = CurrentDate + "0" + Month;
   }
   if (Day >= 10 )
   {
    CurrentDate = CurrentDate + Day ;
   }
   else
   {
    CurrentDate = CurrentDate + "0" + Day ;
   }
 
   if(Hour >=10)
   {
    CurrentDate = CurrentDate+ Hour ;
   }
   else
   {
    CurrentDate = "0" + Hour ;
   }
   if(Minute >=10)
   {
    CurrentDate = CurrentDate  + Minute ;
   }
   else
   {
    CurrentDate = CurrentDate + "0" + Minute ;
   }    
   if(Second>=10)
   {
    CurrentDate = CurrentDate + Second;
   }
   else
   {
    CurrentDate = CurrentDate + "0" + Second;
   }
   return CurrentDate;
}
</script>
</body>
</html>



java

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;



  @RequestMapping(value = "/savemobile")
    @ResponseBody
    public String saveMobile(@RequestParam(value = "yzm", required = false) String yzm , User user ) {
    UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext()
        .getAuthentication()
        .getPrincipal();
    User userdata= indexService.getUserByNameAndPwd(userDetails.getUsername(),userDetails.getPassword());
    if(user!=null){
    if(user.getMobilePhone()!=null){
    userdata.setMobilePhone(user.getMobilePhone());
    userdata.setMobileBindState("1");
    Message msg = new Message();
    msg.setContent("尊敬的用户您好,您本次的验证码为"+yzm);
    msg.setReceiverPhone(user.getMobilePhone());
    msg.setSenderFullname(userdata.getUserName());
    msg.setSenderId(userdata.getId());
    msg.setReceiverId(userdata.getId());
    msg.setReceiverFullname(userdata.getUserName());
    msg.setSenderTime(new Date());
    msg.setSendState("1");
    messageService.add(msg);
    int i= userService.edit(userdata);
    return i+"";
    }else{
    return "2";
    }
    }else{
    return "0";
    }
//    System.out.println("111");
    }
    @RequestMapping(value = "/msg")
    @ResponseBody
    public Object msg(@RequestParam(value = "url", required = false) String url) {
    HttpClient client=new DefaultHttpClient();
HttpGet get=new HttpGet(url);//访问域B的链接
HttpResponse responseproxy;
String msg="";
URLEncoder.encode(url);
try {
responseproxy = client.execute(get);
HttpEntity entity = responseproxy.getEntity();
msg=EntityUtils.toString(entity);
System.out.println(msg);
client.getConnectionManager().shutdown();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();


System.out.println("====nihao==");//    System.out.println("111");
return JSONSerializer.toJSON(msg);

    }
分享到:
评论

相关推荐

    javascript 利用ajax获取验证码内容和session值

    本话题主要探讨如何使用JavaScript和AJAX来获取验证码内容以及服务器端的Session值。 验证码(CAPTCHA)是一种安全机制,用于防止机器自动操作,如防止恶意注册或登录尝试。通常,验证码会生成一串随机字符图像,...

    解决前后端分离 vue+springboot 跨域 session+cookie失效问题

    3. **代理服务器**:使用Nginx或其他反向代理服务器,让Vue应用请求通过代理服务器转发到Spring Boot应用,这样所有请求都在同一个域下,避免跨域问题,同时Session可以正常工作。 综上所述,解决Vue+Spring Boot...

    ajax教程 CHM

    此时可以使用JSONP,它通过动态插入`&lt;script&gt;`标签来实现跨域请求。JSONP本质上是一个函数调用,服务器返回一个包裹在函数调用中的JSON数据。 ### 6. jQuery和Ajax jQuery库简化了Ajax的使用,提供了`$.ajax()`, `...

    Ajax+Java开发实例源文件

    7. **JSONP跨域通信**:如果需要跨域请求,可以使用JSONP(JSON with Padding)技术,通过动态插入`&lt;script&gt;`标签来实现。 8. **错误处理**:在Ajax请求中,我们需要处理网络错误、服务器错误以及解析错误等各种...

    ajax验证用户注册

    10. **跨域问题**:出于安全考虑,浏览器限制了Ajax的跨域请求。不过,通过JSONP(JSON with Padding)或CORS(跨源资源共享)技术,可以在特定条件下实现跨域请求。 总结来说,Ajax验证用户注册是提升Web应用用户...

    ajax实例 防gougou

    - **使用验证码**:在请求前要求用户输入验证码,防止自动化脚本。 - **用户代理检测**:识别非标准浏览器(如爬虫)并拒绝服务。 - **IP限制**:对特定IP地址的请求次数进行限制。 - **动态令牌**:每个请求都...

    验证码 spring + dwr

    这样,当用户点击提交按钮时,JavaScript可以立即发送请求到服务器,验证验证码的正确性,然后根据结果给出反馈。 具体步骤如下: 1. **生成验证码**:通常,我们可以使用Java的图像处理库,如Java2D,来创建一个...

    精通Ajax(下)

    4. **Ajax库与框架**:jQuery、axios、fetch API等工具简化了Ajax的使用,提供了一致的接口和更强大的功能,如错误处理、跨域请求、进度监控等。 ### 三、Ajax的挑战与解决方案 1. **浏览器兼容性**:不同浏览器对...

    PHP+Ajax实现验证码的实时验证

    在本例中,由于Nat123端口映射导致的跨域问题,作者选择使用session而不是cookie来存储验证码。 接下来,我们关注Ajax的核心部分。Ajax(Asynchronous JavaScript and XML)允许我们在不刷新整个页面的情况下与...

    AJAX入门与相关例子(整合SSH)

    2. **安全考虑**:防止跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等,使用验证码、令牌等机制增强安全性。 3. **性能优化**:减少 AJAX 请求的大小和频率,利用 JSONP、CORS 等技术解决跨域问题,提升用户体验。 ...

    异步刷新-验证码kaptchaDome

    5. **安全验证**:生成的验证码需要与服务器端进行验证,确保只有正确输入验证码的请求才能通过。这涉及到服务器端的存储和比较逻辑,以及可能的会话管理。 6. **响应式设计**:为了适应不同设备和屏幕尺寸,验证码...

    php + h5 滑块验证码源码代码封装到了类和js中适合所有框架

    4. **跨域资源共享(CORS)**:如果网站有跨域需求,前端需要设置CORS策略,允许JavaScript发送请求到不同的域名。 5. **响应式设计**:考虑到不同设备的屏幕尺寸,H5滑块验证码需要做好响应式布局,确保在手机、平板...

    ASP+Ajax注册表单

    9. **用户体验优化**:使用Ajax可以提供更流畅的交互,但也要注意避免过于频繁的异步请求,以免增加服务器负担。同时,应确保表单在没有JavaScript的情况下也能正常工作,以兼容不支持或禁用了JavaScript的浏览器。 ...

    jajx hackes

    书中的内容可能包括如何处理跨域请求,如使用JSONP(JSON with Padding)或CORS(Cross-Origin Resource Sharing)。 7. **安全问题**:Ajax技术也可能带来一些安全风险,如XSS(Cross-Site Scripting)和CSRF...

    iframe跨域与session失效问题的解决办法

    何为跨域跨域session/cookie? 也就是第三方session/cookie。第一方session/cookie指的是访客当前访问的网站给访客的浏览器设置的seesion /cookie, 会被存储在访客的计算机上。第三方session/cookie指的是当前访问的...

    根据url获取页面数据

    可以使用多线程或异步IO来并发处理多个请求,使用代理IP池来避免IP被封,以及对请求进行合理的缓存。 以上就是关于“根据URL获取页面数据”的相关知识,涵盖了网络请求、爬虫技术、跨域处理、数据解析等多个方面。...

    ajaxcomment

    7. **跨域问题**:由于同源策略的限制,Ajax请求可能遇到跨域问题。解决方法包括CORS(跨源资源共享)设置、JSONP(JSON with Padding)或使用服务器代理。 8. **安全考虑**:AjaxComment应考虑到安全问题,例如...

    通过WebBrowser进行页面采集时,有效的跳过js生成的各种验证信息,并获取所有返回的json数据.zip

    2. **跨域请求和XHR(XMLHttpRequest)**:为了获取JSON数据,我们需要模拟AJAX请求。在C#中,可以使用`WebBrowser`控件的`Document.InvokeScript`方法执行`XMLHttpRequest`或者现代的`fetch` API,从而发送GET或...

    JavaScript调用WEB服务

    如果Web服务不在同一个域下,需要开启服务器端的CORS(Cross-Origin Resource Sharing)配置,允许跨域请求。 10. **安全考虑**:在实际应用中,需确保调用Web服务的安全性,避免XSS(跨站脚本攻击)和CSRF(跨站...

Global site tag (gtag.js) - Google Analytics