zoukankan      html  css  js  c++  java
  • 关于Ajax跨域

      本人因工作需求,编写了一个测试页面,在页面填写完信息之后去向一个站点请求数据,然后返回结果!一开始是直接用Ajax在脚本中去访问,没有大碍(因为目标地址是本机上的一个网站),但是当站点去外部的网站时,发现结果不大对!于是问了度娘,得到的结果是Ajax跨域问题!关于这个问题就不多说了,这里给一个链接:<http://www.cnblogs.com/sunxucool/p/3433992.html>

    看完之后觉得好厉害,可惜后台是java写的!而我是学.NET的!

    问题有几个:1.虽然解决了跨域问题,但是请求的文件格式有限,jsonp

           2.后台代码需要修改(但是测试的站点不是我写的,不是我说改就能改)

    于是又引出了另一个解决方案:用中间介质!

      方法:Ajax---->ashx------>目标地址

      解释:就是Ajax向自己写的一个ashx去请求,然后在ashx的C#代码中去向目标地址发送请求,然后返回结果

    所以引出了两个东西叫:HttpWebRequest和HttpWebResponse

    1:GET方式请求

       HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://fanyi.baidu.com/transcontent");//创建请求对象,如果有参数就写在url中

      

       using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())

                {

                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))

                    {

                        responseData = reader.ReadToEnd().ToString();//这就是结果,至于怎么处理,自己看着办

                    }

                }

     实际上就是使用HttpWebRequest创建一个请求对象,然后获取响应流,读取数据,如果有参数直接写在url中带过去(不要问我url中怎么带参数)

    2:POST方式请求

      HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://fanyi.baidu.com/transcontent");

                Encoding encoding = Encoding.UTF8;

                string param = "ie=utf-8&source=txt&query=hello&t=1327829764203&token=8a7dcbacb3ed72cad9f3fb079809a127&from=auto&to=auto";//和Get不同是参数字符串要另外独立出来

                byte[] bs = Encoding.ASCII.GetBytes(param);//将参数字符串变成字节数组

                string responseData = String.Empty;           

                req.Method = "POST";//设置提交方式,默认是get

                req.ContentType = "application/x-www-form-urlencoded";//设置标头类型!!!!!很重要

                req.ContentLength = bs.Length;//字节数组的长度

                using (Stream reqStream = req.GetRequestStream())

                {

                    reqStream.Write(bs, 0, bs.Length);//向请求流中写入参数字符串的字节数组!!!!POST方式提交参数的方法

                    reqStream.Close();

                }

                using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())

                {

                    using (StreamReader reader = new StreamReader(response.GetResponseStream(),encoding))

                    {

                        responseData = reader.ReadToEnd().ToString();//获取到结果,可以根据响应的数据类型自己另外处理

                    }

                }

    解读就是:建立请求对象,设置提交方式,设置标头,获取请求流,写入参数字符串的字节数组,然后获取响应流

  • 相关阅读:
    PAT (Advanced Level) Practice 1054 The Dominant Color (20 分)
    PAT (Advanced Level) Practice 1005 Spell It Right (20 分) (switch)
    PAT (Advanced Level) Practice 1006 Sign In and Sign Out (25 分) (排序)
    hdu 5114 Collision
    hdu4365 Palindrome graph
    单链表查找最大值、两个递增的链表合并并且去重
    蓝桥杯-最短路 (SPFA算法学习)
    蓝桥杯-最大最小公倍数
    Codeforces-470 div2 C题
    蓝桥杯-地宫取宝
  • 原文地址:https://www.cnblogs.com/wuding/p/4747577.html
Copyright © 2011-2022 走看看