36.从入门到精通:CGI环境变量 GET和POST方法 GET方法 POST方法 CGI中使用Cookie Cookie设置 检索Cookie信息

36.从入门到精通:CGI环境变量 GET和POST方法 GET方法 POST方法 CGI中使用Cookie Cookie设置 检索Cookie信息

CGI环境变量

CGI程序可以使用环境变量来获取有关Web服务器和客户端的信息。以下是一些常用的CGI环境变量:

HTTP_COOKIE:包含客户端发送的所有cookie。
HTTP_REFERER:包含客户端从中链接到当前页面的URL。
HTTP_USER_AGENT:包含客户端浏览器的名称和版本号。
PATH_INFO:包含与CGI脚本关联的附加路径信息。
QUERY_STRING:包含查询字符串,即URL中的所有参数。
REMOTE_ADDR:包含客户端的IP地址。
REMOTE_HOST:包含客户端的主机名(如果可用)。
REQUEST_METHOD:包含客户端使用的HTTP方法,如GET或POST。
SCRIPT_FILENAME:包含正在运行的CGI脚本的完整路径。
SCRIPT_NAME:包含正在运行的CGI脚本的名称。
SERVER_NAME:包含Web服务器的主机名。
SERVER_PORT:包含Web服务器的端口号。
SERVER_PROTOCOL:包含Web服务器使用的协议名称和版本号,如HTTP/1.1。
SERVER_SOFTWARE:包含Web服务器的名称和版本号。

CGI程序可以使用Python的os模块来访问这些环境变量。例如,要获取客户端的IP地址,可以使用以下代码:

import os

remote_addr = os.environ['REMOTE_ADDR']
print('Your IP address is: {}'.format(remote_addr))

这将打印出类似于“Your IP address is: 192.168.0.1”的消息。

GET和POST方法

GET和POST方法是HTTP协议中最常用的两种请求方法,它们分别用于向Web服务器发送请求和提交表单数据。

GET方法

GET方法用于向Web服务器请求资源,例如网页、图片、音频、视频等。GET请求将请求参数附加在URL后面,以问号(?)分隔URL和请求参数,多个请求参数之间用&符号分隔。例如:

http://www.example.com/search?q=python&page=1

GET请求的优点是简单、快速、易于缓存,适用于请求数据量较小的资源。缺点是请求参数暴露在URL中,不安全,不适合提交敏感数据。

POST方法

POST方法用于向Web服务器提交表单数据,例如用户登录、注册、评论等。POST请求将请求参数放在请求体中,而不是URL中,请求体的格式由Content-Type头部指定,常见的格式有application/x-www-form-urlencoded、multipart/form-data和application/json等。
例如:

POST /login HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded

username=admin&password=123456

POST请求的优点是安全、可靠、支持多种数据格式和大数据量传输,适用于提交敏感数据和大数据量的表单。缺点是稍微复杂一些,需要服务器端进行额外的处理。
在Python中,可以使用标准库中的urllib和http.client模块来发送GET和POST请求,也可以使用第三方库(例如requests)来简化HTTP请求的处理。

CGI中使用Cookie

在CGI程序中使用cookie,可以在HTTP响应头中设置Set-Cookie标头。以下是一个简单的示例,用于在客户端浏览器中设置名为“mycookie”的cookie:

import os

print("Content-type:text/html\r\n")
print("Set-Cookie: mycookie=value; path=/")
print("Cookie has been set.")

这将在客户端浏览器中设置名为“mycookie”的cookie,其值为“value”。请注意,此代码中的“path=/”指定可以访问cookie的所有页面的路径。

要从客户端浏览器中读取cookie,可以在CGI程序中使用Python的os模块。以下是一个示例,用于读取名为“mycookie”的cookie:

import os

cookie_string = os.environ.get('HTTP_COOKIE')
if cookie_string:
    cookies = cookie_string.split(';')
    for cookie in cookies:
        name, value = cookie.strip().split('=')
        if name == 'mycookie':
            print("Content-type:text/html\r\n")
            print("Value of cookie 'mycookie' is {}.".format(value))
            break
    else:
        print("Content-type:text/html\r\n")
        print("Cookie 'mycookie' not found.")

这将从客户端浏览器中读取名为“mycookie”的cookie,并在网页上显示其值。如果未找到cookie,则显示“Cookie’mycookie’ not found.”消息。

Cookie设置

Cookie是一种在Web浏览器和Web服务器之间传递信息的机制,它可以在浏览器中存储一些信息,例如用户的登录状态、购物车内容等。Web服务器可以在HTTP响应中设置Cookie,浏览器可以在HTTP请求中发送Cookie,从而实现状态的保持。

在Python中,可以使用标准库中的http.cookiejar和urllib.request模块来处理Cookie。下面简单介绍一下如何使用这两个模块来设置和发送Cookie:

创建CookieJar对象。CookieJar是一个存储Cookie的容器,它可以在内存中保存Cookie

import http.cookiejar

cookie_jar = http.cookiejar.CookieJar()

创建HTTPCookieProcessor对象。HTTPCookieProcessor是一个处理Cookie的处理器,它可以从HTTP响应中提取Cookie,并将Cookie添加到HTTP请求中。

import urllib.request

cookie_processor = urllib.request.HTTPCookieProcessor(cookie_jar)
opener = urllib.request.build_opener(cookie_processor)
urllib.request.install_opener(opener)

发送HTTP请求。可以使用urllib.request.urlopen函数发送HTTP请求,Cookie会自动保存到CookieJar中。

response = urllib.request.urlopen('http://www.example.com/')

获取Cookie。可以使用CookieJar对象的方法获取Cookie。

for cookie in cookie_jar:
    print(cookie.name, cookie.value)

以上是简单的Cookie设置和发送过程,实际上还有很多细节需要注意,例如Cookie的域名、路径、过期时间等。另外,如果需要在多个HTTP请求之间共享Cookie,可以将CookieJar保存到文件中,或者使用类似Redis这样的缓存服务器来保存Cookie。

检索Cookie信息

在CGI程序中,可以通过读取HTTP Cookie头来检索cookie信息。HTTP Cookie头包含一个或多个cookie,每个cookie由一个名称和一个值组成,两者之间用等号分隔。多个cookie由分号和空格分隔。以下是一个示例,用于读取名为“mycookie”的cookie:

import os

cookie_string = os.environ.get('HTTP_COOKIE')
if cookie_string:
    cookies = cookie_string.split('; ')
    for cookie in cookies:
        name, value = cookie.split('=')
        if name == 'mycookie':
            print("Value of cookie 'mycookie' is {}.".format(value))
            break
    else:
        print("Cookie 'mycookie' not found.")

在这个示例中,我们首先使用os.environ.get(‘HTTP_COOKIE’)读取HTTP
Cookie头。然后,我们使用split(‘; ‘)将cookie字符串拆分为单个cookie。接下来,我们使用split(’=’)将每个cookie拆分为名称和值。最后,我们检查名称是否为“mycookie”,如果是,则打印出cookie的值。如果未找到cookie,则打印出“Cookie ‘mycookie’ not found.”消息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值