文章更新于:2020-03-04

注1:安装 python 参见: python 的安装使用和基本语法

注2:配置 web 环境参见: Windows&linux使用集成环境搭建 web 服务器

注3:Windows 配置 CGI参见:windows环境下利用python进行CGI配置

注4:更多 CGI 配置参见:python CGI 编程实践

一、配置 CGI 的访问目录

1、安装 httpd

这个肯定不用说,CGI 是基于 web 提供服务的,你肯定得安装一个 web 服务程序。

这里选择 httpd,在终端执行 sudo yum install httpd 进行安装。

2、找到 cgi-bin 目录并写个小程序

安装好httpd以后,在/var/www/目录下会有一个cgi-bin目录,这个是默认的cgi程序的放置目录,是可以直接使用的。

在这个目录下可以直接写一个CGI程序,然后尝试访问。

举个栗子:

#! /usr/bin/env python
# -*- coding:UTF-8 -*-
print('Content-Type: text/html; charset=utf-8\n') import os
print("你好")
print("<br>你的IP是:%s"%os.environ['REMOTE_ADDR'])
print ("<br>你的UA是:%s"%os.environ['HTTP_USER_AGENT'])
print("<br>你的请求端口是:%s"%os.environ['REMOTE_PORT'])
print("<br>你的请求路径是:http://anti-fraud.wiki%s"%os.environ['REQUEST_URI'])
print("<br>你的请求方法是:%s"%os.environ['REQUEST_METHOD'])

解释一下:

1、第一行要声明该CGI程序的解释器,这里是python,当然也可以使用python3。不过python3在输出中文的时候可能会出一些问题,如何解决这个稍后我们在讨论。当然路径你还可以这样写#! /usr/bin/python

2、第二行是指定编码方式,注意,在第二行以后这个代码可能会被解释为注释而不是编码方式。

3、第三行是打印响应头信息,以回车符结尾是结束头部。

4、下面若干行是输出了一些环境变量,比如访问者的IP、UA等信息。

访问效果如下:

二、添加/改变 CGI 程序路径

1、改变 CGI 路径

虽然,程序是运行起来了。但是,这个cgi-bin路径我向改改怎么办,不要慌,看操作。

(1)编辑 /etc/httpd/conf/httpd.conf配置文件。

推荐使用vim编辑器,命令模式下按/键然后键入cgi进行搜索。



ScriptAlias 是指 cgi 路径的别名,这里我们将其改为ok,如下图:

![更改cgi别名](https://img-blog.csdnimg.cn/20200304224650819.png

保存退出之后,重启 httpd 使配置文件生效,然后尝试访问。

2、添加 CGI 路径

如果已有路径不能满足我们的需求,不要慌,我们自己再加一个。



在编辑配置文件步骤中,编辑内容如下:

这里我们添加了一个web访问路径为hello而实际文件路径为/var/www/hello/的cgi程序路径

我们访问一下试试:

三、解决python3 CGI 输出中文乱码问题

1、乱码现象



访问效果:



日志记录:

AH01215: UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not in range(128)

2、解决办法

1、在程序头部加上如下图所示代码:

#! /usr/bin/env python3
# -*- coding:UTF-8 -*-
import codecs, sys
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer)
print('Content-Type: text/html; charset=utf-8\n') import os
print("hello")
print("你好")
print("<br>你的IP是:%s"%os.environ['REMOTE_ADDR'])
print ("<br>你的UA是:%s"%os.environ['HTTP_USER_AGENT'])
print("<br>你的请求端口是:%s"%os.environ['REMOTE_PORT'])
print("<br>你的请求路径是:http://anti-fraud.wiki%s"%os.environ['REQUEST_URI'])
print("<br>你的请求方法是:%s"%os.environ['REQUEST_METHOD'])
print("end")

在程序头部加入如上代码第3-第5行,访问效果如下:



2、经测试,下面头部代码同样有效

#! /usr/bin/env python3
# -*- coding:UTF-8 -*-
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.detach(),encoding='utf-8')
print('Content-Type: text/html; charset=utf-8\n')

四、Enjoy!

linux 配置 python3 CGI的更多相关文章

  1. Python3 CGI编程

    什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户 ...

  2. Linux配置tomcat (centos配置java环境 tomcat配置篇 总结三)

    ♣下载安装tomcat7 ♣设置启动和关闭 ♣设置用户名和密码 ♣发布java web项目 声明:这篇教程是建立在前两篇教程的基础上的,所以,还没安装工具和jdk,可以先看这个系列的前面两篇(去到文末 ...

  3. Linux中python3,django,redis以及mariab的安装

    1. Linux中python3,django,redis以及mariab的安装 2. CentOS下编译安装python3 编译安装python3.6的步骤 1.下载python3源码包 wget ...

  4. 在Linux 安装Python3.5.6详细文档!!!!

    在Linux 安装Python3.5.6详细文档!!!! 1.安装相关依赖库(工具包) yum install gcc patch libffi-devel python-devel  zlib-de ...

  5. kali配置python3的开发环境

    最近打算学习一下python3,毕竟不会写脚本的程序员,不是一个好的安全测试人员! 对于我来说,python的大部分应用都是在linux上,而kali是我唯一一个有图形化操作界面的linux系统 所以 ...

  6. linux配置supervisor

    linux配置supervisor 安装 pip install supervisor 生成配置文件 使用 echo_supervisord_conf > /etc/supervisord.co ...

  7. Linux装python3

     记住下载的软件最好装在/opt下默认的 大家都这样做 linux装python3.7我们以安装最新的来做测试 先下载关联的包防止出错 安装python前的库环境,非常重要yum install gc ...

  8. Linux配置Nginx+Tomcat负载均衡

    cd /usr/local/tomcat1/webapps/ROOT/ tar -zxvf nginx-1.14.2.tar.gz -C /usr/local 一.Linux配置Nginx 一.下载N ...

  9. linux 配置tensorflow 全过程记录

    前几天刚下一个deepin系统,是基于linux 内核的,界面的设计有些mac的feel 感觉还是挺不错的,之后就赶紧配置了一下tensorflow ,尽管之前配置过,但是这次还是遇到点儿问题,所以说 ...

随机推荐

  1. Python1-变量

    一.变量和简单数据类型 1.变量 命名规则: 变量名组成——字母.下划线.数字(不可做首字符): 用下划线分隔单词,不可包含空格: 关键字和函数名不可做变量名: 小写字母做变量名,不建议使用大小写的字 ...

  2. c# 导出excel的两种常见方法

    1,不是用第三方插件(html直接输出) StringBuilder ssb = new StringBuilder(); StringBuilder sb = new StringBuilder() ...

  3. 基于Ubuntu的ORB-SLAM2项目环境搭建过程

    目录 关于ORB-SLAM2 环境搭建 已有环境 创建环境 新建项目目录 安装Pangolin 安装OpenCV 3.2 安装Eigen DBoW2 and g2o (Included in Thir ...

  4. 欲善事先利器-IEAD插件篇

    工欲善其事,必先利其器,好鞋踢好球是非常合乎逻辑的事情. --<长江七号> 同样的开场白,不一样的酒,不一样的故事. 上篇<欲善事先利器--系统篇>已经推荐了一些个人常用的效率 ...

  5. 面试话痨(二)C:JAVA String,别以为你穿个马甲我就不认识你了

    面试话痨系列是从技术广度的角度去回答面试官提的问题,适合萌新观看!   面试官,别再问我火箭怎么造了,我知道螺丝的四种拧法,你想听吗? String相关的题目,是面试中经常考察的点,当面试中遇到了St ...

  6. 手写简单IOC

    ReflectUtils.java (反射工具类) package top.icss.ioc; import java.io.File; import java.io.FileFilter; impo ...

  7. IE 跨域session丢失问题

    在测试时发现session 取不到值,以为是session赋值除了问题,但是在Chrome中一切正常,故排除此原因.那问题肯定出在浏览器身上里.于是一步一步调试,发现在IE中,如果页面跳转,Sessi ...

  8. LoadRunner录制HTTPS协议脚本

    学习LoadRunner录制HTTPS协议脚本,其实是一个意外的收获.当我拿到要测试的URL时,我像以前的步骤一样录制脚本,但是录制结束后,发现并没有生成脚本,开始以为是LoadRunner的原因,我 ...

  9. Prism 源码解读1-Bootstrapper和Region的创建

    介绍 之前也研究过Prism框架但是一直没有深入理解,现在项目上想把一个Winform的桌面应用程序改造成WPF程序,同时我希望程序是可测试可维护架构良好的,Prism的这些设计理念正好符合我的需求, ...

  10. Webpack抽离第三方类库以及common解决方案

    前端构建场景有两种,一种是单页面构建,另一种是多入口构建多页面应用程序(我视野比较小,目前就知道这两种),下面我们针对这两种场景总结了几种抽离第三方类库以及公共文件的解决方案. 如果有哪些地方优化不周 ...