zoukankan      html  css  js  c++  java
  • linux 配置 python3 CGI

    文章更新于: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
    ')
    
    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进行搜索。
    定位到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
    ')
    
    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
    ')
    

    四、Enjoy!

  • 相关阅读:
    SpringBoot Rabbitmq接收消息
    SpringBoot Rabbitmq发送消息
    Rabbitmq 介绍
    Eureka 使用Spring cloud config 管理中心启动
    Spring Cloud Config 搭建Config 服务
    Eureka 向Server中注册服务
    Eureka 配置
    给定一些分割符,给定一个待分割的字符串,打印出分割之后最长的字符串
    给定N个整数,乱序,分行打印每个数字和其位置
    给定一个整数,求它的二进制表示中有多少个1
  • 原文地址:https://www.cnblogs.com/amnotgcs/p/12694359.html
Copyright © 2011-2022 走看看