精华内容
下载资源
问答
  • 假设网站A,它一个简单输入用户名页面,界面上两个输入框,第一个输入框包含在一个form表单里用来实现form提交,第二个输入框是单独、没有包含在form里,下面就用这两个输入框来学习下jQueryajax。...
  • 假设网站A,它一个简单输入用户名页面,界面上两个输入框,第一个输入框包含在一个form表单里用来实现form提交,第二个输入框是单独、没有包含在form里,下面就用这两个输入框来学习下jQueryajax。...

    打算写个ajax系列的博文,主要是写给自己看,学习下ajax的相关知识和用法,以更好的在工作中使用ajax。

    假设有个网站A,它有一个简单的输入用户名的页面,界面上有两个输入框,第一个输入框包含在一个form表单里用来实现form提交,第二个输入框是单独的、没有包含在form里,下面就用这两个输入框来学习下jQuery的ajax。

    1,前端的html和javascript代码

    页面html

    输入用户名

    页面中引入的demo01.js代码,注意此处实现的是一个简单的GET请求。

    $(function($) {

    $('input[name=submit2]').on('click', function(e) {

    let username = '';

    if ('' !== (username = $('#user-name2').val())) {

    $.ajax({

    url: `demo.php?name=${username}`,

    dataType: 'json',

    method: 'GET',

    success: function(data) {

    if (data.result == 1) {

    $('.box').html(`

    你的姓名${username}已成功保存。
    `);

    }

    },

    error: function(xhr) {

    // 导致出错的原因较多,以后再研究

    alert('error:' + JSON.stringify(xhr));

    }

    })

    .done(function(data) {

    // 请求成功后要做的工作

    console.log('success');

    })

    .fail(function() {

    // 请求失败后要做的工作

    console.log('error');

    })

    .always(function() {

    // 不管成功或失败都要做的工作

    console.log('complete');

    });

    }

    });

    });

    jQuery的ajax()方法有两种写法,分别是: $.ajax(url [, settings]); 和 $.ajax([settings]); 两种写法都可以,感觉第一种方法适合用于参数较少的情况,比如,如果只是对一个url做一个简单的请求,不对返回的数据、格式和错误有要求,只需要传递一个url参数就可以,那就可以用第一种写法。上面的demo01.js中采用的是第二种写法,下面解释下参数和相关的函数。

    (1)上面代码中ajax()的参数

    可以看到这里的参数类型都是javascript对象,即都是 o = {key: value}; 这种类型的数据。jQuery的文档中规定了,这里的参数只能是PlainObject(对象类型的对象),不能是null、自定义的数组、或者像docement这种归属于某种执行环境(比如浏览器)属于某种类型的对象。这里不太好说清楚,可以做个小试验。在命令行里打开node repl,进行下测试:

    > node

    > typeof(null);

    'object'

    > typeof([]);

    'object'

    > typeof(document);

    'undefined'

    > typeof({});

    'object'

    可以看到null、[](数组类型)、{}(对象类型)都是对象。因为在js中一切皆对象。而在交互式环境中,document则是未定义的一个变量,所以它的类型是undefined。如果在浏览器环境下测试下typeof(document),那么它的类型也是object。下面逐个解释下代码用到的参数:

    url,要请求的url地址,它的值应该是包含url的字符串。

    dataType,字符串。发出请求后,期望从服务器返回的数据类型。可以指定的类型有xml、html、script、json、jsonp、text。如果不指定,jquery会基于MIME做判断,并会返回一个下面xml、json、script、html当中的一种类型。

    method,字符串。HTTP请求方法,默认为GET,上面代码中指定为POST。

    success, Type: Function( Anything data, String textStatus, jqXHR jqXHR ) ,匿名函数。HTTP请求成功后要调用的函数,可以传递三个参数给它:从服务器返回的数据(如果上面指定了dataType,则服务器返回的数据类型需要与上面dataType指定的类型一致)、一个可以描述状态的字符串textStatus、还有一个jqXHR对象。可以看到上面只传递了从服务器返回的数据data。

    error, Type: Function( jqXHR jqXHR, String textStatus, String errorThrown ) ,匿名函数。HTTP请求失败后要调用的函数,同样也可以传递三个参数。

    除了用到的这些参数,还有许多其他的如:async、dataFilter、mimeType等其他参数,不过现在的这个简单的脚本还用不到那么多参数。

    (2)“延迟加载函数”

    上面代码中 $.ajax().done().fail().always() jqXHR.done()、jqXHR.fail()、jqXHR.always()中分别可以添加deferred对象被解析、被拒绝、被解析或被拒绝这三种情况下的要处理的工作,比如添加个函数什么的。为什么能够这么做呢,这要看$.ajax()返回了什么,它返回的是jqXHR对象(jquery版本大于1.5时)。这个对象实现了Promise interface(Promise机制,用来传递异步操作消息,代表了某个未来才会知道结果的事件)。这就允许在一次请求中添加多个回调函数,甚至可以在请求完成后添加回调函数。

    标题“延迟加载”描述的不够准确,但从效果上看是有延迟加载的效果。关于这个问题更详细的解释可以参考jQuery文档中对jqXHR的解释  或一位前端前辈的解释jQuery的deferred对象详解 。

    2,后端运行在nginx服务器上的php代码

    后端的逻辑很简单:我们把前端获取的数据保存到名为data-demo01的文件中,保存成功则向前端返回一个1作为标志。

    (1)前端ajax发起GET请求

    如果前端的ajax发起的是一个GET请求,那么后端也比较好处理:

    if (isset($_GET['name']) && !empty($_GET['name'])) {

    $username = trim($_GET['name']);

    if (file_put_contents('data-demo01', $username)) {

    echo '{"result": 1}';

    }

    }

    (2)前端ajax发起POST请求

    js代码中需要修改下ajax()的url、method参数,并增加一个data参数,修改后如下:

    // 相同的代码省略

    $.ajax({

    url: `demo01.php`,

    dataType: 'json',

    method: 'POST',

    data: {"username": username},

    // 相同的代码省略

    因为用POST传递数据,所以去掉url中用来传递数据的参数,下面的data类型要与dataType一致,为json格式,然后将username作为值传递。

    那么后端的代码也就可以确定了:

    if (isset($_POST['username']) && !empty($_POST['username'])) {

    $username = trim($_POST['username']);

    if (file_put_contents('data-demo01', $username)) {

    echo '{"result": 1}';

    }

    }

    如果不出错的话,效果应该是下面这样然后查看下data-demo01,名字果然被保存了。

    那么问题来了,如果出错了呢?比如data-demo01文件不可写,或者后台服务器返回的数据格式有错误,或者网络出错。那又该怎么处理呢?我现在也不太清楚,后续再研究吧。

    以上所述是小编给大家介绍的使用jQuery的ajax方法向服务器发出get和post请求的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    展开全文
  • 减少HTTP请求的方法

    千次阅读 2013-03-21 10:29:13
    最近在看《高性能网站建设指南》,学习一些网站优化的技术,读到关于减少http请求的一些方法:  1. 图片地图  图片地图允许你在一个图片上并联多个URL,目标URL的选择取决于用户单击了图片上的哪个位置。 使用...

        最近在看《高性能网站建设指南》,学习一些网站优化的技术,读到关于减少http请求的一些方法:

       1. 图片地图

            图片地图允许你在一个图片上并联多个URL,目标URL的选择取决于用户单击了图片上的哪个位置。 使用图片地图这种放手就既能减少HTTP请求,又无需改变页面外观感受,

    图片地图有两种类型:服务器端图片地图将所有点击提交到同一个目标URL,向其传递用户单击的x、y坐标。web应用程序将该x、y坐标映射为适当的操作。客户端图片地图更加典型,因为它可以将用户的点击映射到一个操作。而无需向后端应用程序发送请求。映射通过HTML的MAP标签实现。


           使用图片地图也有缺点。在定义图片地图的区域坐标时,如果采取手工的方式则很难完成且容易出错,而且除了矩形之外几乎无法定义其他形状。通过DHTML创建的图片地图则在Internet Explorer中无法工作。


    2. CSS Sprites

          和图片地图一样,css sprites也可以合并图片,但更为灵活。又降低了下载量。合并后的图片会比分离的图片的总和要小,这是因为它降低了图片自身的开销,如果需要在页面中为背景、按钮、导航拦、链接等提供大量图片,css sprties绝对是一种优秀的解决方案---干净的标签、很少的图片和很短的响应时间。

     


    3. 内联图片

       通过使用data:URL模式可以在Web页面中包含图片但无需任何额外的HTTP请求,尽管Internet Explorer 目前还不支持这种方式,但它能给其他浏览器带来的节省使得它值得关注。


       data: URL模式的主要缺陷在于不受IE的支持,另外一个缺陷是可能存在数据大小上的限制,


    4. 合并脚本和样式表

         和图片地图及css sprites的优点一样,将那些单独的文件合并到一个文件中,可以减少http的请求数量并缩短最终用户响应时间。

       

         

    展开全文
  • 如何将本地输入用户名密码发送到服务器?是该用ns什么方法?最好是swift
  • 假设网站A,它一个简单输入用户名页面,界面上两个输入框,第一个输入框包含在一个form表单里用来实现form提交,第二个输入框是单独、没有包含在form里,下面就用这两个输入框来学习下jQueryajax。...

    打算写个ajax系列的博文,主要是写给自己看,学习下ajax的相关知识和用法,以更好的在工作中使用ajax。

    假设有个网站A,它有一个简单的输入用户名的页面,界面上有两个输入框,第一个输入框包含在一个form表单里用来实现form提交,第二个输入框是单独的、没有包含在form里,下面就用这两个输入框来学习下jQuery的ajax。

     

    1,前端的html和javascript代码

    页面html

     1     <main style="text-align: center; margin: 200px auto;">
     2         <h2>输入用户名</h2>
     3         <form class="" action="demo01.php" method="post" style="margin-bottom: 20px;">
     4             <input id="user-name" type="text" name="username" placeholder="请填写您的用户名">
     5             <input type="submit" name="submit1" value="form提交1" class="input">
     6         </form>
     7         <input id="user-name2" type="text" name="username2" placeholder="请填写您的用户名">
     8         <input type="button" name="submit2" value="ajax提交2">
     9         <div class="box">
    10 
    11         </div>
    12     </main>
    13 
    14     <script src="../../js/jquery-3.1.0.min.js"></script>
    15     <script src="demo01.js"></script>


    页面中引入的demo01.js代码,注意此处实现的是一个简单的GET请求。

     1 $(function($) {
     2     $('input[name=submit2]').on('click', function(e) {
     3         let username = '';
     4         if ('' !== (username = $('#user-name2').val())) {
     5             $.ajax({
     6                 url: `demo0.php?name=${username}`,
     7                 dataType: 'json',
     8                 method: 'GET',
     9                 success: function(data) {
    10                     if (data.result == 1) {
    11                         $('.box').html(`<div>你的姓名${username}已成功保存。</div>`);
    12                     }
    13                 },
    14                 error: function(xhr) {
    15                     // 导致出错的原因较多,以后再研究
    16                     alert('error:' + JSON.stringify(xhr));
    17                 }
    18             })
    19             .done(function(data) {
    20                 // 请求成功后要做的工作
    21                 console.log('success');
    22             })
    23             .fail(function() {
    24                 // 请求失败后要做的工作
    25                 console.log('error');
    26             })
    27             .always(function() {
    28                 // 不管成功或失败都要做的工作
    29                 console.log('complete');
    30             });
    31         }
    32     });
    33 });

    jQuery的ajax()方法有两种写法,分别是: $.ajax(url [, settings]); 和 $.ajax([settings]); 两种写法都可以,感觉第一种方法适合用于参数较少的情况,比如,如果只是对一个url做一个简单的请求,不对返回的数据、格式和错误有要求,只需要传递一个url参数就可以,那就可以用第一种写法。上面的demo01.js中采用的是第二种写法,下面解释下参数和相关的函数。

    (1)上面代码中ajax()的参数

    可以看到这里的参数类型都是javascript对象,即都是 o = {key: value}; 这种类型的数据。jQuery的文档中规定了,这里的参数只能是PlainObject(对象类型的对象),不能是null、自定义的数组、或者像docement这种归属于某种执行环境(比如浏览器)属于某种类型的对象。这里不太好说清楚,可以做个小试验。在命令行里打开node repl,进行下测试:

    1 > node
    2 > typeof(null);
    3 'object'
    4 > typeof([]);
    5 'object'
    6 > typeof(document);
    7 'undefined'
    8 > typeof({});
    9 'object'

    可以看到null、[](数组类型)、{}(对象类型)都是对象。因为在js中一切皆对象。而在交互式环境中,document则是未定义的一个变量,所以它的类型是undefined。如果在浏览器环境下测试下typeof(document),那么它的类型也是object。下面逐个解释下代码用到的参数:

    url,要请求的url地址,它的值应该是包含url的字符串。

    dataType,字符串。发出请求后,期望从服务器返回的数据类型。可以指定的类型有xml、html、script、json、jsonp、text。如果不指定,jquery会基于MIME做判断,并会返回一个下面xml、json、script、html当中的一种类型。

    method,字符串。HTTP请求方法,默认为GET,上面代码中指定为POST。

    success, Type: Function( Anything data, String textStatus, jqXHR jqXHR ) ,匿名函数。HTTP请求成功后要调用的函数,可以传递三个参数给它:从服务器返回的数据(如果上面指定了dataType,则服务器返回的数据类型需要与上面dataType指定的类型一致)、一个可以描述状态的字符串textStatus、还有一个jqXHR对象。可以看到上面只传递了从服务器返回的数据data。

    error, Type: Function( jqXHR jqXHR, String textStatus, String errorThrown ) ,匿名函数。HTTP请求失败后要调用的函数,同样也可以传递三个参数。

    除了用到的这些参数,还有许多其他的如:async、dataFilter、mimeType等其他参数,不过现在的这个简单的脚本还用不到那么多参数。

    (2)“延迟加载函数”

    上面代码中 $.ajax().done().fail().always() jqXHR.done()、jqXHR.fail()、jqXHR.always()中分别可以添加deferred对象被解析、被拒绝、被解析或被拒绝这三种情况下的要处理的工作,比如添加个函数什么的。为什么能够这么做呢,这要看$.ajax()返回了什么,它返回的是jqXHR对象(jquery版本大于1.5时)。这个对象实现了Promise interface(Promise机制,用来传递异步操作消息,代表了某个未来才会知道结果的事件)。这就允许在一次请求中添加多个回调函数,甚至可以在请求完成后添加回调函数。

    标题“延迟加载”描述的不够准确,但从效果上看是有延迟加载的效果。关于这个问题更详细的解释可以参考jQuery文档中对jqXHR的解释  或一位前端前辈的解释jQuery的deferred对象详解

     2,后端运行在nginx服务器上的php代码

    后端的逻辑很简单:我们把前端获取的数据保存到名为data-demo01的文件中,保存成功则向前端返回一个1作为标志。

    (1)前端ajax发起GET请求

    如果前端的ajax发起的是一个GET请求,那么后端也比较好处理:

    1     if (isset($_GET['name']) && !empty($_GET['name'])) {
    2         $username = trim($_GET['name']);
    3         if (file_put_contents('data-demo01', $username)) {
    4             echo '{"result": 1}';
    5         }     
    6 }

    (2)前端ajax发起POST请求

    js代码中需要修改下ajax()的url、method参数,并增加一个data参数,修改后如下:

    1 // 相同的代码省略
    2 $.ajax({
    3     url: `demo01.php`,
    4     dataType: 'json',
    5     method: 'POST',
    6     data: {"username": username},
    7 // 相同的代码省略

    因为用POST传递数据,所以去掉url中用来传递数据的参数,下面的data类型要与dataType一致,为json格式,然后将username作为值传递。

    那么后端的代码也就可以确定了:

    1     if (isset($_POST['username']) && !empty($_POST['username'])) {
    2         $username = trim($_POST['username']);
    3         if (file_put_contents('data-demo01', $username)) {
    4             echo '{"result": 1}';
    5         }
    6     }

    如果不出错的话,效果应该是下面这样然后查看下data-demo01,名字果然被保存了。

    那么问题来了,如果出错了呢?比如data-demo01文件不可写,或者后台服务器返回的数据格式有错误,或者网络出错。那又该怎么处理呢?我现在也不太清楚,后续再研究吧。



    转载于:https://www.cnblogs.com/yangtoude/p/jquery-ajax-get-post.html

    展开全文
  • HTTP客户端服务器请求数据

    千次阅读 2016-02-25 12:02:36
    一、HTTP客户端其他网站请求数据 在node.js中,我们可以轻松的向任何网站发送请求并读取该网站响应数据: 在http模块中,我们可以使用Request方法向服务器(其他网站)请求数据。Request方法的使用方式如下: ...

    一、HTTP客户端向其他网站请求数据

    在node.js中,我们可以轻松的向任何网站发送请求并读取该网站的响应数据:

    在http模块中,我们可以使用Request方法向服务器(其他网站)请求数据。Request方法的使用方式如下:

    var req = http.request(opts,callback);

    我们注意到在request方法中有两个参数,其中opts参数为一个对象或者字符串,用于指定请求的目标url地址。如果opts参数值为一个字符串,将自动使用url模块中的parse方法转换为一个对象。其中opts参数值或者使用parse方法转换后的对象中,可以指定的属性有:

    • host: 用于指定域名或者目标主机的IP地址,默认的为localhost
    • hostname: 与host属性值相同,但是如果host和hostname的值都被绑定,那么将会优先使用hostname
    • port: 指定目标服务器用于HTTP客户端连接的端口号
    • localAddress:用于指定专用于网络连接的本地端口
    • socketPath:用于指定目标UNix域端口
    • method:用于指定HTTP请求方法,,默认属性值为get
    • path:用于指定请求路径及查询字符串,默认属性值为”/“
    • headers:用于指定客户端请求头对象
    • auth:用来指定认证信息部分
    • agent:用于指定HTTP代理

        headers = {
            'Content-Type': 'application/json',
            'Content-Length': reqBodyStr.length
        };
    
        options = {
            host: 'localhost',
            port: 4000,
            path: path,
            method: 'GET',
            headers: headers
        };
    
        internalReq = http.request(options, function (newRes) {
            newRes.setEncoding('utf-8');
    
            var responseString = '';
    
            newRes.on('data', function (data) {
                responseString += data;
            });
    
            newRes.on('end', function () {
                try {
                    var resultObject = JSON.parse(responseString);
                    //console.log(resultObject);
                    next(resultObject);
                    //res.send(resultObject);
                }catch (e){
                    //res.send('error');
                }
    
            });
        });
        internalReq.on('error', function (e) {
    
        });
        internalReq.write(reqBodyStr);
        internalReq.end();
    其中,
    newRes.on('data', function (data) {
                responseString += data;
            });

    客户端接收到数据 ;

    newRes.on('end', function () {
    
    });
    服务端结束响应。

    二、制作代理服务器

    制作代理服务器的大概流程为:
    首先创建一个HTTP服务器,当服务器接收到客户端请求后,向 被代理网站(www.baidu.com)请求数据,接收到数据之后将响应数据发送给客户端。
    server = http.createServer(function(sreq,sres) {
      url_parts = url.parse(sreq.url);
      options = {
        host:'www.baidu.com',
        port:80,
        path:url_parts.pathname,
        headers: sreq.headers
      };
      creq = http.get(options,function(cres) {
        sres.writeHead(cres.statusCode,cres.headers);
        cres.pipe(sres);
        });
      sres.pipe(creq);
    });
    server.listen(3000,'127.0.0.1');
    上述代码便实现了代理服务器。




    展开全文
  • 在进行流媒体直播/点播服务器开发过程中,我们要进行数据采集,但网站肯定是设置了限制,为了突破这限制,我们需要模拟浏览器访问获取数据,那么首先要了解HTTP的请求,那么在Web中HTTP请求是怎样呢?HTTP的请求...
  • 常见的请求Method

    2021-01-29 20:55:44
    常见的请求Method 在Http协议中,定义了八种请求方法。这里介绍两种常用的请求方法,分别是get请求...但是有的网站和服务器为了做反爬虫机制,也经常会不按常理出牌,可能一个应该使用get方法的请求就一定要改成post
  • "尝试 URI"http://localhost:2369/MainService.asmx"发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确跨域策略,或策略不适用于 SOAP 服务。您可能需要与该服务所有者联系,以发布跨域...
  • 客户端服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码...
  • 目录:一、urllib模块二、requests模块三、请求模块中的一些关键参数总结四、数据提取一、urllib模块1.urllib.request模块在python2的版本中,...下面是几种常用的方法向网站发起一个请求并获取响应:urllib.requ...
  • JavaWeb - 常用HTTP请求头与响应头

    千次阅读 2018-06-25 10:32:52
    客户端服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码...
  • 网站实时刷新方法

    千次阅读 2018-10-18 19:46:40
    页面实时刷新几种解决办法。...这种方式用户体验不好,而且如果网页访问量较大, 大量的请求有可能造成服务器崩溃。 2、轮询: 客户端不断的向server发送请求, 以保证页面数据始终是数据库最新...
  • 如果你的页面数据量非常大,那么它的呈现将会会费很长时间,这里我将给大家介绍一个减少asp.net 网站页面大小的方法。当你浏览一个网页时,右键然后选择’查看源文件’你会发现在每行源文件的左侧都会很多空白格。它...
  • urllib 为什么要学urllib? 1.一些比较老爬虫项目用就是urllib 2.我们在做一些爬虫时候往往需要request+urllib一起使用 3.urllib是python内置模块 ...2.urllib.request.urlopen()向网站
  • HTTP请求头与响应头

    2018-03-06 14:39:53
    客户端服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本...
  • 1网络请求--抓包

    2019-07-03 20:48:22
    常用的请求方法: ...2.post请求服务器发送数据(登录)、上传文件等,会对服务器资源产生影响时候会使用post请求。 以上是网站开发中常用两种方法。并且一般情况下都会遵循使用原则。但是...
  • 目录:一、urllib模块二、requests模块三、请求模块中的一些关键参数总结四、数据提取一、urllib模块1.urllib.request模块在python2的版本中,...下面是几种常用的方法向网站发起一个请求并获取响应:urllib.requ...
  • “尝试 URI“http://localhost:2369/MainService.asmx”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确跨域策略,或策略不适用于 SOAP 服务。您可能需要与该服务所有者...
  • 实现HTTP请求的便捷方法是使用Python的请求库。 请求中最受欢迎的功能之一是简单的代理支持。 HTTP作为协议具有处理代理... 在更邪恶的圈子中,这是一种使您的知名度未知并向网站吸引尽可能多的客户(而不只是一个客户
  • 1.先调用登录方法腾讯发送请求, 2.腾讯携带本网站唯一对应参数OPENID,ACCESSTOKEN,返回到对应回调页面, 3.回调页面接受到腾讯参数后,通过这个两个参数,再发出对应的请求,如查询用户数据。 4.腾讯做出...
  • 图片优化哪些方法

    2020-05-10 23:17:55
    加载的图片太多导致服务器请求的次数太多;2.图片太大导致每次请求的时间过长,页面加载完成慢。 解决目标:减少资源到客户端的延迟。 那么问题来了,应该分别如何解决呢? 一、图片太多1.将图片服务和应用服务...
  • 性能优化的方法

    2015-11-29 18:33:00
    接着,如果另外一个使用相同URL发送请求,他能够使用之前已经保存下来反馈文件,而不是再次服务器发出请求。 -缓存优点: -减少延迟:因为所发出网页请求是指向更接近客户端缓存而不再是源服务器端,...
  • 由于一般情况下点击浏览器回退按钮显示内容是浏览器缓存内容,不会重新服务器发起请求, 所以后台验证代码就不起作用了,这样就可能在用户退出情况下依然可以可以看到系统内容 要想解决此问题,可以...
  • 常常是一些名不见经传网站来盗取一些实力网站的地址(比如一些音乐、图片、软件下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。 为什么会产生盗链 一般浏览一个重要现象...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 324
精华内容 129
关键字:

向网站请求的方法有