CGI详解(原理,配置及访问)

20 篇文章 1 订阅
订阅专栏

一.基本原理

 CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。

组成CGI通信系统的是两部分:一部分是html页面,就是在用户端浏览器上显示的页面。另一部分则是运行在服务器上的Cgi程序。它们之间的通讯方式如下图:

服务器和客户端之间的通信,是客户端的浏览器和服务器端的http服务器之间的HTTP通信,我们只需要知道浏览器请求执行服务器上哪个CGI程序就可以了,其他不必深究细节,因为这些过程不需要程序员去操作。

服务器和CGI程序之间的通讯才是我们关注的。一般情况下,服务器和CGI程序之间是通过标准输入输出来进行数据传递的,而这个过程需要环境变量的协作方可实现。

1.   服务器将URL指向一个应用程序

2.   服务器为应用程序执行做准备

3.   应用程序执行,读取标准输入和有关环境变量

4.   应用程序进行标准输出

对于Windows系统而言,还可以通过profile文件进行数据传输(如ini文件),但在这里不做研究。环境变量在CGI中有着重要的地位!每个CGI程序只能处理一个用户请求,所以在激活一个CGI程序进程时也创建了属于该进程的环境变量。


二.环境变量

       对于CGI程序来说,它继承了系统的环境变量。CGI环境变量在CGI程序启动时初始化,在结束时销毁。

       当一个CGI程序不是被HTTP服务器调用时,它的环境变量几乎是系统环境变量的复制。当这个CGI程序被HTTP服务器调用时,它的环境变量就会多了以下关于HTTP服务器、客户端、CGI传输过程等项目。

服务器和客户端之间的通信,是客户端的浏览器和服务器端的http服务器之间的HTTP通信,我们只需要知道浏览器请求执行服务器上哪个CGI程序就可以了,其他不必深究细节,因为这些过程不需要程序员去操作。

服务器和CGI程序之间的通讯才是我们关注的。一般情况下,服务器和CGI程序之间是通过标准输入输出来进行数据传递的,而这个过程需要环境变量的协作方可实现。

1.   服务器将URL指向一个应用程序

2.   服务器为应用程序执行做准备

3.   应用程序执行,读取标准输入和有关环境变量

4.   应用程序进行标准输出

对于Windows系统而言,还可以通过profile文件进行数据传输(如ini文件),但在这里不做研究。环境变量在CGI中有着重要的地位!每个CGI程序只能处理一个用户请求,所以在激活一个CGI程序进程时也创建了属于该进程的环境变量。

二.环境变量

       对于CGI程序来说,它继承了系统的环境变量。CGI环境变量在CGI程序启动时初始化,在结束时销毁。

       当一个CGI程序不是被HTTP服务器调用时,它的环境变量几乎是系统环境变量的复制。当这个CGI程序被HTTP服务器调用时,它的环境变量就会多了以下关于HTTP服务器、客户端、CGI传输过程等项目。

    

CONTENT_TYPE:如application/x-www-form-urlencoded,表示数据来自HTML表单,并且经过了URL编码。

ACCEPT:客户机所支持的MIME类型清单,内容如:”image/gif,image/jpeg”

REQUEST_METHOD:它的值一般包括两种:POST和GET,但我们写CGI程序时,最后还要考虑其他的情况。

1.POST方法
       如果采用POST方法,那么客户端来的用户数据将存放在CGI进程的标准输入中,同时将用户数据的长度赋予环境变量中的CONTENT_LENGTH。客户端用POST方式发送数据有一个相应的MIME类型(通用Internet邮件扩充服务:Multi-purpose Internet Mail Extensions)。目前,MIME类型一般是:application/x-wwww-form-urlencoded,该类型表示数据来自HTML表单。该类型记录在环境变量CONTENT_TYPE中,CGI程序应该检查该变量的值。

2.GET方法
       在该方法下,CGI程序无法直接从服务器的标准输入中获取数据,因为服务器把它从标准输入接收到得数据编码到环境变量QUERY_STRING(或PATH_INFO)。

      GET与POST的区别:采用GET方法提交HTML表单数据的时候,客户机将把这些数据附加到由ACTION标记命名的URL的末尾,用一个包括把经过URL编码后的信息与CGI程序的名字分开:http://www.mycorp.com/hello.html?name=hgq$id=1,QUERY_STRING的值为name=hgq&id=1

有些程序员不愿意采用GET方法,因为在他们看来,把动态信息附加在URL的末尾有违URL的出发点:URL作为一种标准用语,一般是用作网络资源的唯一定位标示。

 环境变量是一个保存用户信息的内存区。当客户端的用户通过浏览器发出CGI请求时,服务器就寻找本地的相应CGI程序并执行它。在执行CGI程序的同时,服务器把该用户的信息保存到环境变量里。接下来,CGI程序的执行流程是这样的:查询与该CGI程序进程相应的环境变量:第一步是request_method,如果是POST,就从环境变量的len,然后到该进程相应的标准输入取出len长的数据。如果是GET,则用户数据就在环境变量的QUERY_STRING里。

3.POST与GET的区别
       以 GET 方式接收的数据是有长度限制,而用 POST 方式接收的数据是没有长度限制的。并且,以 GET 方式发送数据,可以通过URL 的形式来发送,但 POST方式发送的数据必须要通过 Form 才到发送。

三.CGI程序实现步骤
1.从服务器获取数据
     C语言实现代码:

        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
 
       int get_inputs()
       {
            int length;
            char *method;
            char *inputstring;
            method = getenv(“REQUEST_METHOD”); //将返回结果赋予指针
            if(method == NULL)
                 return 1;       //找不到环境变量REQUEST_METHOD
            if(!strcmp(method, ”POST”))  // POST方法
            {
                 length = atoi(getenv(“CONTENT_LENGTH”)); //结果是字符,需要转换
                 if(length != 0)
                 {
                         inputstring = malloc(sizeof(char)*length + 1) //必须申请缓存,因为stdin是不带缓存的。
                         fread(inputstring, sizeof(char), length, stdin); //从标准输入读取一定数据
                  }
            }
            else if(!strcmp(method, “GET”))
            {
                        Inputstring = getenv(“QUERY_STRING”);    
                        length = strlen(inputstring);
            }
            if(length == 0)
                      return 0;
        }

    Perl实现代码:

       

            $method = $ENV{‘REQUEST_METHOD’};
            if($method eq ‘POST’)
            {
                      Read(STDIN, $input, $ENV{‘CONTENT_LENGTH’});
            }
            if($method eq ‘GET’ || $method eq ‘HEAD’)
            {
                      $input = $ENV{‘QUERY_STRING’};
            }
            if($input eq “”)
            {
                      &print_form;
                      exit;
             }

     PYTHON代码实现

       #!/usr/local/bin/python

       import cgi
       def main():
       form = cgi.FieldStorage()

       Python代码实现更简单,cgi.FieldStorage()返回一个字典,字典的每一个key就是变量名,key对应的值就是变量名的值,更本无需用户再去进行数据解码!

       获取环境变量的时候,如果先判断“REQUEST_METHOD”是否存在,程序会更健壮,否则在某些情况下可能会造成程序崩溃。因为假若CGI程序不是由服务器调用的,那么环境变量集里就没有与CGI相关的环境变量(如REQUEST_METHOD,REMOTE_ADDR等)添加进来,也就是说“getenv(“REQUEST_METHOD”)”将返回NULL!

2.URL编码

      不管是POST还是GET方式,客户端浏览器发送给服务器的数据都不是原始的用户数据,而是经过URL编码的。此时,CGI的环境变量Content_type将被设置,如Content_type = application/x-www-form-urlencode就表示服务器收到的是经过URL编码的包含有HTML表单变量数据。

编码的基本规则是

    变量之间用“&”分开;

    变量与其对应值用“=”连接;

    空格用“+”代替;

    保留的控制字符则用“%”连接对应的16禁止ASCII码代替;

    某些具有特殊意义的字符也用“%”接对应的16进制ASCII码代替;

    空格是非法字符;

    任意不可打印的ASCII控制字符均为非法字符。

例如,假设3个HTML表单变量filename、e-mail和comments,它们的值对应分别为hello、mike@hotmail.com和I’ll bethere for you,则经过URL编码后应为:

filename=hello&e-mail=hello@hotmail.com&comments=I%27ll+be+there+for+you

所以,CGI程序从标准输入或环境变量中获取客户端数据后,还需要进行解码。解码的过程就是URL编码的逆变:根据“&”和“=”分离HTML表单变量,以及特殊字符的替换。

在解码方面:

     PYTHON代码实现是最理想的,cgi.FieldStorage()函数在获取数据的同时就已自动进行代码转换了,无需程序员再进行额外的代码编写。Perl其次,因为在一个现成的Perl库:cgi-lib.pl中提供了ReadParse函数,用它来进行URL解码很简单:

  • require ‘cgi-lib.pl’;

  • &ReadParse(*input);

CGI数据输出方面:

      CGI程序如何将信息处理结果返回给客户端?这实际上是CGI格式化输出。

      在CGI程序中的标准输出stdout是经过重定义了的,它并没有在服务器上产生任何的输出内容,而是被重定向到客户浏览器,这与它是由C,还是Perl或Python实现无关。

所以,我们可以用打印来实现客户端新的HTML页面的生成。比如,C的printf是向该进程的标准输出发送数据,Perl和Python用print向该进程的标准输出发送数据。

(1)   CGI标题

CGI的格式输出内容必须组织成标题/内容的形式。CGI标准规定了CGI程序可以使用的三个HTTP标题。标题必须占据第一行输出!而且必须随后带有一个空行

( 2 )  MIME:

向标准输出发送网页内容时要遵守MIME格式规则:

任意输出前面必须有一个用于定义MIME类型的输出内容(Content-type)行,而且随后还必须跟一个空行。如果遗漏了这一条,服务将会返回一个错误信息。(同样使用于其他标题)

例如Perl和Python:  

          print “Content-type:text/html\n\n”;   //输出HTML格式的数据
          print “<body>welcome<br>”
          print “</body>”

C语言:

   printf( “Content-type:text/html\n\n”);

   printf(“Welcome\n”);

MIME类型以类型/子类型(type/subtype)的形式表示。

其中type表示一下几种典型文件格式的一种:

Text、Audio、Video、Image、Application、Mutipart、Message

Subtype则用来描述具体所用的数据格式。

     

Location

使用Location标题,一个CGI可以使当前用户转而访问同一服务器上的另外一个程序,甚至可以访问另外一个URL,但服务器对他们的处理方式不一样。

使用Location的格式为:Location:Filename/URL,例如:        

         print “Location:/test.html\n\n”;

   这与直接链接到test.html的效果是一样的。
print “Location:http://www.chinaunix.com/\n\n
由于该URL并不指向当前服务器,用户浏览器并不会直接链接到指定的URL,而是给用户输出提示信息。

HTTP状态码

       表示了请求的结果状态,是CGI程序通过服务器用来通知用户其请求是否成功执行的信息码,本文不做研究。

就是获得getResponseCode(),一般值在0~200为正常,超过视为不正常或特殊意思

四.CGI中的信号量和文件锁

       因为CGI程序时公用的,而WEB服务器都支持多进程运行,因此可能会发生同时有多个用户访问同一个CGI程序的情况。比如,有2个用户几乎同时访问同一个CGI程序,服务器为他们创建了2个CGI程序进程,设为进程A和进程B。假如进程A首先打开了某个文件,然后由于某种原因被挂起(一般是由于操作系统的进程调度);而就在进程A被挂起的这段时间内,进程B完成了对文件的整个操作流程:打开,写入,关闭;进程A再继续往下执行,但进程A所操作的文件依旧是原来文件的就版本,此时进程A的操作结果将覆盖进程B的操作结果。

为了防止这种情况发生,需要用到文件锁或者信号量。

钥匙文件?

假如有多个不同的HTML可以调用同一个CGI程序,那么CGI程序如何区分它们呢?一个是通过隐含的INPUT标签。不过觉得这个比较麻烦,因为CGI必须经过一系列解码后才能找到这个隐含INPUT的变量和其值。

五.设置HTTP服务器以兼容CGI

       用Perl编写的CGI程序后缀为:.pl;Python编写的CGI程序后缀为:.py;而C编写的CGI程序后缀为:.cgi,如果在win下编译出来的是.exe,最好将它重命名为.cgi。这些都是为了HTTP服务能够识别并调用它们。

       当使用appche httpd服务器时,请编辑它的配置文件httpd.conf如下:

       修改AddHandler cgi-script一句为AddHandler cgi-script .cgi .py.pl

六.关于CGI的C语言库——cgihtml

       Cgihtml是一个应用非常广泛的C语言编写的CGI库。它提供的功能函数如下:

       Read_cgi_input():获取并解析HTML表单输入,返回一个指向某结构体的指针

       Cgi_val():获取每个表单变量的值

       Html_header():输出HTML标题栏

       Html_begin():输出HTML文档的开始部分

       H1():输出一行字符,字体为H1

Html_end():输出HTML文档的结尾部分。

#include “cgi-lib.h”

#include “html-lib.h”

#include “string-lib.h”

六.后话

      有的人认为可以用JavaScript来代替CGI程序,这其实是一个概念上的错误。JavaScript只能够在客户浏览器中运行,而CGI却是工作在服务器上的。他们所做的工作有一些交集,比如表单数据验证一类的,但是JavaScript是绝对无法取代CGI的。但可以这样说,如果一项工作即能够用JavaScript来做,又可以用CGI来做,那么绝对要使用JavaScript,在执行的速度上,JavaScript比CGI有着先天的优势。只有那些在客户端解决不了的问题,比如和某个远程数据库交互,这时就应该使用CGI了。

SSI:一种用来动态输出HTML文本的特殊程序。

网页里包含有某个变量,提交给服务器后,只有该变量改变。此时我们希望服务器不要把整个页面内容都发送过来,而只需要告诉客户端的浏览器,哪个变量的值便成什么样了,浏览器会自动更新。

SSI在服务器端运行。

SSI不需要外部接口,它不像CGI从标准输入接收信息。

你浏览你的HTML文档时看不到SSI标记,因为它已经被相应的程序输出所替代。

所有的SSI命令都是嵌入在普通的HTML注释行中的。当服务器无法解释SSI时,它将不解释并直接把文档传给浏览器,由于命令在注释中,故浏览器将忽略它们。而当服务器识别SSI时,它并不将该命令传给浏览器,相反,服务器将从上到下扫描HTML文档,执行每一个嵌入注释的命令,并将命令的执行结果代替原注释。

<! –注释文本-->。服务器将根本不查看注释,除非已启动SSI。

与纯注释不同的是,所有的SSI命令都是以#打头。

<!--#command tagname = “parameter”-- >,command指出服务器做什么,tagname指出参数类型,parameter是该命令的用户定义值。

The currentdate is<! --#echo var = “DATE.LOCAL”-- >,服务器将向浏览器输出时间。

原文地址:https://blog.csdn.net/u010068160/article/details/107643133
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: CGI详解(原理,配置及访问) 如若内容造成侵权/违法违规/事实不符,请联系淘嘟嘟网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

CGI原理
langzi989的专栏
03-31 544
博客搬家,原地址:https://langzi989.github.io/2017/05/04/cgi原理/ CGI(Common Gateway Interface)通用网关接口,CGI描述了服务器和请求处理程序之间传输数据局的一种标准。在理解的过程中我们需要区分CGICGI程序,CGI是一种数据传输的标准,而CGI程序是实际处理业务的一个程序。webserver每请求一次,CGI程序就会fo...
【项目实战】自主实现 HTTP 项目(六)——CGI机制
2021级大一程序白一枚,记录学习的每一步的脚印
09-24 1891
我们在之前的篇目中讲到了,在我们客户端向服务器发送请求的时候,如果发送的内容是一个目录或者一个普通文件,我们给他们返回的是一个静态的网页。而接下来我们就讲解另一种情况,如果请求资源路径下面是一个可执行文件,那么这个时候就要我们使用(CGI)机制。
【C/C++】web服务器项目开发总结【请求 | 响应 | CGI | 高并发版本】
最新发布
菜菜成长为后端开发大佬
09-04 994
采用C/S模型,编写支持中小型应用的http,并结合mysql,理解常见互联网应用行为,做完该项目,你可以从技术上完全理解从你上网开始,到关闭浏览器的所有操作中的技术细节。
CGI技术原理
EIP的专栏
09-08 1万+
一、CGI技术 1.1 CGI的提出   CGI是外部扩展应用程序与WWW服务器交互的一个标准接口。按照CGI标准编写的外部扩展应用程序可以处理客户端(一般是WWW浏览器)输入的协同工作数据,完成客户端与服务器的交互操作。这在实际应用中非常有用,如可以编写CGI外部扩展程序来访问外部数据库,客户端用户可以通过它和WWW服务器来进行数据查询。CGI一般分两种:标准CGI和缓冲CGI。所有
CGI(Common Gateway Interface)介绍
liitdar的博客
08-21 1万+
即通用网关接口,是WWW(World Wide Web)技术中最重要的技术之一,是外部应用程序(即CGI程序)与Web服务器之间的接口标准,负责在CGI程序和Web服务器之间传递信息。CGI是Web服务器运行时,调用外部应用程序(即CGI程序)的规范,CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的、新的交互式媒体,按照CGI编写的程序可以扩展Web服务器功能。CGI是比较原始的开发动态网站的方式。
CGI的工作原理
aoe41606的博客
05-13 199
CGI是Webserver和外部程序之间的一个接口。利用CGI程序能够处理从Web上client发送出来的表单和数据。并对此做出相关操作。这样的反应能够是HTML文件、图片、声音、视频等能够在浏览器窗口上出现的不论什么数据。通用网关接口有两个含义。首先它为client用户通过www获取Internet上的其它服务,比如Archie、WAIS、Database等提供了一个接口,...
CGI技术详解.doc
12-24
**CGI技术详解** CGI,全称Common Gateway Interface,是一种通用网关接口,它使得Web服务器能够与外部应用程序交互,处理动态内容。在Web发展的早期,服务器仅能提供静态资源,但随着对动态网页需求的增长,CGI...
CGI原理详解:Web数据库接口与Windows编程框架
CGI原理续——公共网关接口(CGI)在Web数据库技术中的应用深入解析 CGI(Common Gateway Interface,通用网关接口)是Web开发中的关键技术,它允许客户端(如浏览器)通过HTTP协议向服务器提交数据并接收响应。CGI...
Nginx架构及配置详解
企业实战系列集 ●●● https://ximenjianxue.blog.csdn.net
09-10 5377
概述 Nginx采用C进行编写,是俄罗斯程序员开发的一款轻量级的可构建Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器的软件, Nginx服务器是一个高性能的HTTP和反向代理web服务器,同时也可提供了IMAP/POP3/SMTP服务。nginx常用作跑静态和做负载反向代理,动态php交给apache处理,因后者比较稳定,jsp交给tomcat、resin或jboss。n......
Perl CGI编程基础与Apache配置详解
然后,通过`AllowOverride None`、`Options+ExecCGI`等指令启用CGI功能,并可能需要调整权限和访问控制,如添加`.pl`后缀到`AddHandler`部分,以便浏览器能够正确处理Perl脚本。 对于初学者来说,编写第一个Perl ...
CGI原理与实例
qq_32942247的博客
04-13 2314
CGI原理与实例 友好例文推荐:CGI详解原理配置访问) 目录 CGI原理与实例 CGI结构示意图 CGI程序 CGI程序开发 简要说明 CGI工作原理 CGI环境变量 环境变量列表 环境变量的作用 GET/POST 代码实例1 代码说明 CGI标题  CGI程序输入数据分析 代码示例2 友好说明 我们只需要知道浏览器请求执行服务器上哪个CGI...
CGI编程学习
weixin_33730836的博客
01-28 671
一.基本原理 CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。 组成CGI通信系统的是两部分:一部分是html页面,就是在用户端浏览器上显示的页面。另一部分则是运行在服务器上的Cgi程序。 它们之间的通讯方式如...
CGI接口原理及实现
热门推荐
铭毅天下Elasticsearch
12-12 1万+
CGI接口原理及实现(2012-12-7 Over) 1.CGI定义:       CGI(CommonGateway Interface)是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。 2.CGI功能:       绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CG
CGI的基本原理
weixin_30437481的博客
05-15 345
一.基本原理 CGI:通用网关接口(Common Gateway Interface)是一个Webserver主机提供信息服务的标准接口。通过CGI接口,Webserver就行获取client提交的信息。转交给server端的CGI程序进行处理。最后返回结果给client。 组成CGI通信系统的是两部分:一部分是html页面。就是在用户端浏览器上显示的页面。还有一部分则是执...
CGI详解
Milk_1997的博客
08-12 407
当我们在谈到cgi的时候,我们在讨论什么      最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html。事物总是不断发展,网站也越来越复杂,所以出现动态技术。但是服务器并不能直接运行 php,asp这样的文件,自己不能做,外包给别人吧,但是要与第三做个约定,我给你什么,然后你给我什么,就是握把请求参数发送给你,然后我接收你的处理
写文章

热门文章

  • 11n、11ac和11ax速率表 16664
  • 支持刷机的路由器大全(2024) 8648
  • OpenWrt Web GUI WIFI 设置/显示配置的 简单分析 6919
  • 高通(Qualcomm) WiFi 7 产品介绍-IPQ53xx 系列 6820
  • CGI详解(原理,配置及访问) 4663

分类专栏

  • 高通wifi6 wifi7 智能路由器 付费 13篇
  • LINUX 5篇
  • IEEE802.11 21篇
  • WIFI abgnxbebn 19篇
  • 前端开发 3篇
  • TEST 3篇
  • Siliconlabs BG22 4篇
  • 物联网 20篇
  • 传感器 11篇
  • openwrt 7篇
  • QSDK 9篇

最新评论

  • grub rescue救援模式的处理

    m0_71934325: 写的真好,帮大忙了,谢谢楼主

  • beacon帧字段结构最全总结(一)——beacon基本结构

    CloudBud: 2 的 64 个微秒大约相当于 584,542 年。

  • Maple IPQ5018 有线网络组合的配置设计

    redparrot2008: 是的,看一下arm64那个目录文件

  • Maple IPQ5018 有线网络组合的配置设计

    marvinzh: 这个kernel是修改哪个文件?是这个吗?sdk/q ca/src/linux-5.4/arch/ar m/boot/dts

  • Maple IPQ5018 有线网络组合的配置设计

    redparrot2008: 这个是硬件连接方式决定的

大家在看

  • AI学习指南深度学习篇-对比学习的python实践
  • 掌握Windows管理利器:WMI命令实战
  • 从React Hooks看React的本质
  • string类,难吗?这不简简单单! 1199
  • windows蓝屏stop:0x0000007D(INSTALL_MORE_MEMORY),解决方案

最新文章

  • Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )
  • 在Windows中使用WSL访问EXT4分区的完整指南
  • 吞吐系列(二)- Wi-Fi高性能背后的技术原理
2024年39篇
2023年25篇
2022年1篇
2020年2篇
2019年5篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家浙江玻璃钢金属雕塑价格鼎湖玻璃钢人物雕塑公司玻璃钢卡通雕塑公司重庆玻璃钢人物雕塑艺术摆件进口玻璃钢音符雕塑浙江大型商场创意商业美陈策划玻璃钢幼儿园装饰雕塑河北景区玻璃钢雕塑定制广安玻璃钢动物雕塑许昌玻璃钢雕塑加工厂黑龙江步行街玻璃钢雕塑定制广宁玻璃钢人物雕塑公司广州玻璃钢花盆批发公园摆件玻璃钢雕塑销售方法南京逼真玻璃钢座椅雕塑山西玻璃钢商场美陈景观玻璃钢彩绘雕塑定制玻璃钢雕塑过程用到的材料石家庄学校玻璃钢雕塑玻璃钢人物雕塑制作视频玻璃钢雕塑多久会开裂潜江玻璃钢雕塑摆件价格南通玻璃钢商场美陈玻璃钢雕塑的设计制作哪里有安定门商场美陈太原玻璃钢雕塑出售人物玻璃钢雕塑怎么样郑州商场美陈玻璃钢卡通雕塑品牌五华区玻璃钢雕塑设计哪里好南通蓝色玻璃钢花盆香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化