Http协议 get请求页面,返回的为什么是未经过解析的代码? 100C

get操作

为什么返回的是这个未经过解析的结果?

 <html>
<head>
<META NAME="robots" CONTENT="noindex,nofollow">
<script>
(function() {  function getSessionCookies() {   cookieArray = new Array();   var cName = /^\s?incap_ses_/;   var c = 

document.cookie.split(";");   for (var i = 0; i < c.length; i++) {    key = c[i].substr(0, c[i].indexOf("="));    value = c[i].substr

(c[i].indexOf("=") + 1, c[i].length);    if (cName.test(key)) {     cookieArray[cookieArray.length] = value    }   }   return 

cookieArray  }  function setIncapCookie(vArray) {   try {    cookies = getSessionCookies();    digests = new Array(cookies.length);    

for (var i = 0; i < cookies.length; i++) {     digests[i] = simpleDigest((vArray) + cookies[i])    }    res = vArray + ",digest=" + 

(digests.join())   } catch (e) {    res = vArray + ",digest=" + (encodeURIComponent(e.toString()))   }   createCookie("___utmvc", res, 

20)  }  function simpleDigest(mystr) {   var res = 0;   for (var i = 0; i < mystr.length; i++) {    res += mystr.charCodeAt(i)   }   

return res  }  function createCookie(name, value, seconds) {   if (seconds) {    var date = new Date();    date.setTime(date.getTime() 

+ (seconds * 1000));    var expires = "; expires=" + date.toGMTString()   } else {    var expires = ""   }   document.cookie = name + 

"=" + value + expires + "; path=/"  }  function test(o) {   var res = "";   var vArray = new Array();   for (var j = 0; j < o.length; 

j++) {    var test = o[j][0]    switch (o[j][1]) {    case "exists":     try {   if(typeof(eval(test)) != "undefined"){         

vArray[vArray.length] = encodeURIComponent(test + "=true")   }   else{      vArray[vArray.length] = encodeURIComponent

(test + "=false")    }     } catch (e) {      vArray[vArray.length] = encodeURIComponent(test + "=false")     }     break;    case 

"value":     try {      vArray[vArray.length] = encodeURIComponent(test + "=" + eval(test).toString())     } catch (e) {      vArray

[vArray.length] = encodeURIComponent(test + "=" + e)     }     break;   case "value_or_nil":        try{            if

(typeof(eval(test)) != "undefined"){                vArray[vArray.length] = encodeURIComponent(test + "=" + eval

(test).toString())          }           else{               vArray[vArray.length] = 

encodeURIComponent(test + "=nil")           }                   }       catch(e){       

    vArray[vArray.length] = encodeURIComponent(test + ":" + test_type + "=" + e)        }       break;     case 

"plugin_extentions":        try {           extentions = []             for (var 

i=0;i<navigator.plugins.length;i++) {               filename = navigator.plugins[i].filename                

if(typeof(filename) != "undefined") {                   if (filename.split(".").length == 2) {              

        ext = filename.split(".")[1]                        if (extentions.indexOf(ext) < 0) {      

                    extentions.push(ext)                        }               

                    }               }               }           for (i = 

0; i < extentions.length; i++) {                vArray[vArray.length] = encodeURIComponent("plugin_ext=" + extentions

[i]);           }       } catch (e) {        vArray[vArray.length] = encodeURIComponent("plugin_ext=" + e)      

}       break;  case "plugins":     try{         p=navigator.plugins         pres=""         for (a in p){pres+=(p[a]

['description']+" ").substring(0,20)}         vArray[vArray.length] = encodeURIComponent("plugins=" + pres);         }     catch(e){   

      vArray[vArray.length] = encodeURIComponent("plugins=" +e);         }  break;      case "plugin":     try {      a = 

navigator.plugins;      for (i in a) {       f = a[i]["filename"].split(".");       if (f.length == 2) {        vArray[vArray.length] 

= encodeURIComponent("plugin=" + f[1]);        break       }      }     } catch (e) {      vArray[vArray.length] = encodeURIComponent

("plugin=" + e)     }     break    }   }   vArray = vArray.join();   return vArray  }  var o = [   ["navigator", "exists"],   

["navigator.vendor", "value"],   ["navigator.vendor", "value_or_nil"],   ["opera", "exists"],   ["ActiveXObject", "exists"],   

["navigator.appName", "value"],   ["navigator.appName", "value_or_nil"],   ["platform", "plugin"],   ["platform", 

"plugin_extentions"],   ["webkitURL", "exists"],   ["navigator.plugins.length==0", "value"],   ["navigator.plugins.length==0", 

"value_or_nil"],   ["_phantom", "exists"] ];  try {   setIncapCookie(test(o));   document.createElement("img").src = 

"/_Incapsula_Resource?SWKMTFSR=1&e=" + Math.random()  } catch (e) {   img = document.createElement("img");   img.src = 

"/_Incapsula_Resource?SWKMTFSR=1&e=" + e  } })();
</script>
<script>
(function() { 
var z="";var 

b="7472797B766172207868723B76617220743D6E6577204461746528292E67657454696D6528293B766172207374617475733D227374617274223B7661722074696D6

96E673D6E65772041727261792833293B77696E646F772E6F6E756E6C6F61643D66756E6374696F6E28297B74696D696E675B325D3D22723A222B286E6577204461746

528292E67657454696D6528292D74293B646F63756D656E742E637265617465456C656D656E742822696D6722292E7372633D222F5F496E63617073756C615F5265736

F757263653F4553324C555243543D363726743D373826643D222B656E636F6465555249436F6D706F6E656E74287374617475732B222028222B74696D696E672E6A6F6

96E28292B222922297D3B69662877696E646F772E584D4C4874747052657175657374297B7868723D6E657720584D4C48747470526571756573747D656C73657B78687

23D6E657720416374697665584F626A65637428224D6963726F736F66742E584D4C4854545022297D7868722E6F6E726561647973746174656368616E67653D66756E6

374696F6E28297B737769746368287868722E72656164795374617465297B6361736520303A7374617475733D6E6577204461746528292E67657454696D6528292D742

B223A2072657175657374206E6F7420696E697469616C697A656420223B627265616B3B6361736520313A7374617475733D6E6577204461746528292E67657454696D6

528292D742B223A2073657276657220636F6E6E656374696F6E2065737461626C6973686564223B627265616B3B6361736520323A7374617475733D6E6577204461746

528292E67657454696D6528292D742B223A2072657175657374207265636569766564223B627265616B3B6361736520333A7374617475733D6E6577204461746528292

E67657454696D6528292D742B223A2070726F63657373696E672072657175657374223B627265616B3B6361736520343A7374617475733D22636F6D706C657465223B7

4696D696E675B315D3D22633A222B286E6577204461746528292E67657454696D6528292D74293B6966287868722E7374617475733D3D323030297B706172656E742E6

C6F636174696F6E2E72656C6F616428297D627265616B7D7D3B74696D696E675B305D3D22733A222B286E6577204461746528292E67657454696D6528292D74293B786

8722E6F70656E2822474554222C222F5F496E63617073756C615F5265736F757263653F535748414E45444C3D323032323435333335373832393938393330312C34343

9343735343238383537333032323038302C31333934313435363332383536343334363138322C313432323937222C66616C7365293B7868722E73656E64286E756C6C2

97D63617463682863297B7374617475732B3D6E6577204461746528292E67657454696D6528292D742B2220696E6361705F6578633A20222B633B646F63756D656E742

E637265617465456C656D656E742822696D6722292E7372633D222F5F496E63617073756C615F5265736F757263653F4553324C555243543D363726743D373826643D2

22B656E636F6465555249436F6D706F6E656E74287374617475732B222028222B74696D696E672E6A6F696E28292B222922297D3B";for (var i=0;i<b.length;i

+=2){z=z+parseInt(b.substring(i, i+2), 16)+",";}z = z.substring(0,z.length-1); eval(eval('String.fromCharCode('+z+')'));})();
</script></head>
<body>
<iframe style="display:none;visibility:hidden;" src="//content.incapsula.com/jsTest.html" id="gaIframe"></iframe>
</body></html>

而浏览器返回的结果是正常的
正确的返回结果

那么请问,这个到底是什么原因呢?
怎么才能用 get方式 正确获取到 这个结果?

0

8个回答

服务器端得xhr请求得到的就是浏览器打开后查看源代码弹出的内容一模一样,js脚本之类动态生成的内容获取不到,你要获取js动态生成的内容,自己找下数据接口,ajax从哪个地址请求的,然后捉取哪个接口页面

2

看你这个问题问得,get本来就是取服务器上的文件,它才不管服务器给它什么东西呢。你给什么地址,它就到什么地方取文件,即使用里面有JS代码,它也不会执行的啊。

要看到页面是什么样子,只有通过浏览器解析里面的内容才可以了。

1

这个返回的就是html页面内容,只不过浏览器有DOM引擎替你解析了,作为程序就需要自己来解析

1

应该是后台的问题和你这边无关

1

你好,这个问题的原因是程序返回的结果就是一个html文件,所以是原始数据。而使用浏览器打开,浏览器会自动的帮你解析,所以你就会看到具体的内容。希望能帮到你哈图片说明

1

返回值就是html内容,就好比调用支付宝的支付接口,返回的就是html

0

浏览器收到页面内容后要进行页面内容渲染,过程很复杂,但是其中有一项就是要执行js,而js可以修改原始的内容数据和展现形式,所以你看到的界面就和原始数据不太一样,其实你看到变化的界面的内容是可以从js代码里找到,你可以通过C#正则表达式从内容解析到自己想要的数据,你可以试试!

0

一个GET请求,只会返回一个文件,html文件来说,就是一个文本文件.

页面中css,图片,都是浏览器额外抓取其他内容或者执行js生成出来的.

如果你希望是返回一个可视的 图片 , 你可以找其他软件,模拟浏览器,返回一个渲染好的图片

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
HTTP协议中返回代码302的情况
http 重定向 302
Java_Web学习----http协议详解(请求)
1,http协议的组成Http协议解析:  GET /day09/hello HTTP/1.1               -请求行Accept: text/html,image/*      -- 浏览器接受的数据类型      {请求头}Accept-Charset: ISO-8859-1     -- 浏览器接受的编码格式Accept-Encoding: gzip,compress  --浏...
HTTP请求字符串解析
开发物流项目,编写接口的时候,遇到了这样的一个url需要解析,url如下: http://***/get?$filter=(CreatedOn ge datetime'2016-07-21T00%3A00%3A00') and (SortFlag eq 'A') and(PhoneNo eq '13486391009') and (Execution eq '02' or Execution
基本HTTP请求+JSON解析+发送异步请求
一、什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)   JSON的格式很像OC中的字典和数组 {"name" : "jack", "age" : 10} {"names" : ["jack", "rose", "jim"]} 标准JSON格式的注意点:key必须
解析HTTP协议,GET方法中寻找关键字。
#!/usr/bin/python #coding=utf-8 import dpkt import socket def findDownload(pcap): for (ts, buf) in pcap: try: eth = dpkt.ethernet.Ethernet(buf) ip = eth.data
HTTP协议及请求乱码
HTTP协议简介①HTTP(hypertext transport protocol),即超文本传输协议。这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。②客户端与服务端通信时传输的内容我们称之为报文。③HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送给服务器的称为”请求报文“,服务器发...
HTTP协议中POST、GET、HEAD、PUT等请求方法及相应值得含义
HTTP协议中POST、GET、HEAD、PUT等请求方法及相应值得含义请求方法是请求一定的Web页面的程序或用于特定的URL。可选用下列几种:GET: 请求指定的页面信息,并返回实体主体。HEAD: 只请求页面的首部。POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。PUT: 从客户端向服务器传送的数据取代指定的文档的内容。DELETE: 请求服务器删除指定的页面。OPTI
Python发送http请求解析返回json小demo
python发起http请求,并解析返回的json字符串的小demo,方便以后用到。 #! /usr/bin/env python # -*- coding:gbk -*- import os import sys import json import urllib import urllib2 if __name__ == "__main_
浏览器从发送HTTP请求到返回HTML的过程
前端嘛,离不开浏览器。大致了解了一下浏览器向服务器请求及返回的过程。 内容来自于一个 小姐姐微博 和 原版内容。 一.  从输入网址到看到网页内容的这个过程中到底发生了什么 不谈浏览器解析文件那部分哦。 过程如下: 1.  输入网址 2.  浏览器查找域名的IP地址     域名解析过程如下: 1)浏览器缓存—
代理服务器(proxy)实现GET请求方式并返回请求页面html代码
代码如下 #include &amp;lt;netinet/in.h&amp;gt; #include &amp;lt;sys/socket.h&amp;gt; #include &amp;lt;netdb.h&amp;gt; #include &amp;lt;unistd.h&amp;gt; #include &amp;lt;string.h&amp;gt; #include &amp;lt;stdio.h&amp;gt; int main(int c, ...
网页post和get方法中的中文乱码问题详解
1. gb2312、gbk、iso8859-1、utf8     面对中文乱码的时候首先要解决为什么会乱码?乱码的本质是用来解码的方式不对,而且乱码一般只会出现在中文等语言中。我们常见的就是标题中的四种编码,这四种编码的区别和历史可以自己百度,这里不再赘述。在实际使用的时候,gbk可以兼容gb2312和iso8859-1,因此如果你html页面上用的是gb2312或者iso8859-1,那么后台
C#发Get或Post请求来请求html页面
C#发Get或Post请求来请求html页面 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net; using...
HTTP 协议请求返回值解释
当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出: ① 客户方错误 100  继续 101  交换协议 ② 成功 200  OK 201  已创建 202  接收 203  非认证信息 204  无内容 205  重置内容 206  部分内容 ③ 重定向 300  多路选择 301  永久转移 302  暂时转移
简单的http 发送get 请求, 并获取返回
  WSADATA wData;     ::WSAStartup(MAKEWORD(2, 2), &amp;amp;wData);     SOCKET clientSocket = socket(AF_INET, 1, 0);     struct sockaddr_in ServerAddr = { 0 };     int Ret = 0;     int AddrLen = 0;     H...
Http协议获取图片数据流(GET方式)
String filePath = "http://127.0.0.1/doc/pic.jpg";byte[] byteArray; HttpURLConnection connection = null; if(StringUtils.isEmptyString(filePath)){ return; } try { URL url = new URL(filePath);
发送http get请求,并返回相应内容
public static &amp;lt;T&amp;gt; T executeGetRequest(String url,Map&amp;lt;String,String&amp;gt; headers,Map&amp;lt;String,String&amp;gt; params,HttpEntityHandler&amp;lt;T&amp;gt; handler){ /** 创建发起请求的 client对象 ...
HTTP协议, 浏览器访问服务器, HTTP响应, HTTP请求, 访问百度
浏览器访问服务器的过程 1/用户输入网址 2/浏览器请求DNS服务器,获取域名对应的IP地址(电脑连上网之后会被自动分配一个DNS服务器,域名跟ip是以键值对的形式存在DNS服务器,会按一定规则更新,) 3/请求连接该IP地址服务器 4/发送资源请求(HTTP协议) 5/web服务器接收请求,并解析请求,判断用户意图 6/获取用户想要的资源. 7/将资源返回给web服务器程序...
HTTP协议URL解析的C语言实现
/**  * 日期:2017年12月21日  * 作者:jack  * 原因:没有看到合适的解析URL代码,自己写一个。  * 应用:WIFI模块的Webserver  * 心情:可能不做嵌入式开发了,转向Java 的Hadoop  * 特点:不依赖很多东西,小巧稳定  */ #include #include #include #include #define METH
eclipse httpGet 请求返回中文乱码的问题
1、发现获取中文返回的时候,乱码,经过调试,终于成功。 服务器端编码: 采用asp.net  Response.ContentType = "application/json,txt";  Encoding utf = Encoding.GetEncoding("utf-8");  Response.ContentEncoding = utf; 客户端编码: httpRespon
https协议发送请求体太大,导致了404(tomcat设置的是http端口和请求体大小)
最近在实际中碰到了一个情况,明明tomcat已经设置了请求体大小是10M,但是2M的数据都无法发送过去。但是同样的数据,用restTemplate来组装发送就可以发送成功。用抓包工具,重新点击发送数据,只要数据超过2M,就会报错(走的是负载均衡的,https协议), 但是如果直接用ip向服务器发送(数据量大于2M),就可以成功(走的是http协议,虽然请求一些设置为了https,但是用抓包工具看,
http协议get,post请求示例
想做到以上要求,需先认真了解HTTP协议各字段的含义,以下是部分较好的归纳: HTTP一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。    (1)请求行 请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1
Java发送Http请求,解析html返回
http://zhejiangyinghui.iteye.com/blog/798533 http://blog.csdn.net/miraclestar/article/details/5970072
java中HTTP请求返回的页面值怎么接收到json数据中
接收HTTP返回值到JSON中 // 接受http返回值 public JSONObject result(String https) throws IOException{ // 1.URL类封装了大量复杂的实现细节,这里将一个字符串构造成一个URL对象 URL url = new URL(https); // 2.获取HttpURRLConnection对象 HttpURL...
HTTP的请求报文解析 与 响应报文解析 、 HTTP请求报文中 GET 和 POST的区别 和 URL解析
一、什么是HTTP? HTTP是超文本传输协议 二、HTTP特点? (1)HTTP是无状态协议; (2)HTTP是web服务使用的协议; (3)HTTP是基于TCP协议的; (4)HTTP的通信方式是客户端-服务器模式,即C/S模式 (5)HTTP是应用层协议。 三、HTTP的报文格式 HTTP的报文有两种,分别是请求报文和响应报文 1.请求...
JAVA用http协议GET方法从服务器获取图片保存到本地
本文重点: 1. 通过Java接口进行Http编程 2. 通过GET方式请求数据 3. 理解InputStream和FileOutputStream的使用方法 ------------------------------------------------------------------------------------------------------------ 本例中:
HTTP 数据包头解析
一、连接至Web服务器 一个客户端应用(如Web浏览器)打开到Web服务器的HTTP端口的一个套接字(缺省为80)。 例如:http://www.myweb.com:8080/index.html 在Java中,这将等同于代码: Soceet socket=new Socket("www.myweb.com",8080); InputStream in=socket.getInputStr
VC通过Http协议Get或Post方式与WebService通信,解析返回的Json
本资源是一个封装类,采用异步方式解决了Wininet不能设置超时的问题,当前异步采用C++11线程库及同步方式,可修改为MFC工作线程后在VS2012以下版本使用。JSON解析库采用JSONCPP。调用方式参考: CWininetHttp MyHttp; bool bSucess=false; iMyHttp.RequestJsonInfo((LPCTSTR)m_strUrl,Hr_Post,"Content-Type:application/x-www-form-urlencoded",strData,m_nTimeOut); if (!MyHttp.ParseJsonInfo()) { return OutPutFailInfo(MyHttp.GetErrInfo()); } MFC程序中通过HttpGet和HttpPost方式向WebService发送请求,WebService以Json的方式返回数据,MFC程序解析Json,得到指定数据。
GET方法获得html页面内容
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO;namespace ConsoleApplication1 {     class Program     {         static
【http协议】访问一个完整http请求会经历哪些问题
一个完整的http请求主要有六个步骤:域名解析发起TCP的3次握手建立TCP连接后发起http请求服务器端响应http请求,浏览器得到html代码浏览器解析html代码,并请求html代码中的资源浏览器对页面进行渲染呈现给用户。二.http与https的区别:HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设...
http协议get方式从服务器获取图片并保存到本地
老罗视频学习Http协议。 一.请求端客户端 首先,新建一个java项目。新添加一个包com.http.get,在这个包下新添加一个HttpUrils类。 具体内容如下: public class HttpUtils { //url地址,用这个地址创建URL对象。 private static String url_path ="http://192.168.10.10
httpclient 请求返回字符串
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import
HTTP抓包解析
HTTP抓包 * Http请求部分: * 请求行:请求方式 请求路径 协议版本. * 请求方式: * 请求有很多.常用的是GET和POST. * 区别:get参数会显示到地址栏,post参数在请求体中. * 请求头:键值对. * Referer:网页来源. * User-Agent:浏览...
HTTP协议:输入一个网址,页面发生了些什么呢?
HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。客户端向服务端发送请求,服务端对客户端进行响应的模式。HTTP协议共有以下几个特点: 1、支持客户端\服务端和浏览器\...
http协议的状态码 200、301、304、404、502 HTTP状态码解释
在网站建设的实际应用中,容易出现很多小小的失误,就像mysql当初优化不到位,影响整体网站的浏览效果一样,其实,网站的常规http状态码的表现也是一样,Google无法验证网站几种解决办法,提及到由于404状态页面设置不正常,导致了google管理员工具无法验证的情况,当然,影响的不仅仅是这一方面,影响的更是网站的整体浏览效果。因此,比较清楚详细的了解http状态码的具体含义,对于一个网站站长来说
通过HTTP网络请求过程中的TCP协议
面对互联网的技术日新月异,所要掌握的东西也越来越多。1.关于网络领域的知识(掌握和了解)    a) 协议:tcp、udp、multicast    b) IO (BIO、NIO、AIO)    c) Socket    d) NIO(Netty/Mima)    e) 序列化和反序列化2. 一个http请求,在整个网络中的请求过程    TCP 总共有四层模型:传输层、网络层、数据链路层、物理层...
Http协议中的编码和解码与浏览器渲染
一、字符集与文字编码简介    1. 计算机如何显示文字   我们知道,计算机是以二进制的“形式”来保存和处理数据的,也 就是说,不管我们使用键盘进行输入,还是让计算机去读取一个文本文件,计算机得到的原始内容是一些二进制序列,当需要对这些二进制序列进行显示时,计算机 会依照某种“翻译机制”(也就是编码方式),取到这些二进制序列所表示的每个文字的“轮廓描述”(点阵或者矢量图),知道了轮廓,计算机
VC通过HttpGet和HttpPost方式与WebService通信,解析返回的Json
MFC程序中通过HttpGet和HttpPost方式向WebService发送请求,WebService以Json的方式返回数据,MFC程序解析Json,得到指定数据。
HTTP协议——请求格式及方法
一、HTTP请求格式 当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成: ① 请求方法 URI 协议/版本 ② 请求头(Request Header) ③ 请求正文 下面是一个HTTP请求的例子: GET/sa
HTTP协议的常见的请求方式:GET和POST
转自:http://blog.csdn.net/u010390827/article/details/51334929 HTTP和HTTPS协议 URL全称是Uniform ResourceLocator(统一字典定位符)通过一个URL,能够找到互联网上唯一的11个资源URL就是资源的地址,位置,互联网上的每个资源都有一个唯一URLURL的基本格式 = 协议://主机地
Tomcat未解析JSP,返回源代码问题
Tomcat未解析JSP,返回源代码问题
文章热词 CAVLC系数矩阵解析 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java课程表页面代码 为什么学python