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.”消息。


相关文章
|
6月前
|
前端开发
解决前端ajax跨域请求不携带cookie信息JSESSIONID的问题
解决前端ajax跨域请求不携带cookie信息JSESSIONID的问题
|
6月前
|
安全 PHP
从建站到拿站 -- PHP(Cookie设置)
从建站到拿站 -- PHP(Cookie设置)
44 0
|
15天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
27天前
|
存储 安全 数据安全/隐私保护
Cookie 和 Session 的区别及使用 Session 进行身份验证的方法
【10月更文挑战第12天】总之,Cookie 和 Session 各有特点,在不同的场景中发挥着不同的作用。使用 Session 进行身份验证是常见的做法,通过合理的设计和管理,可以确保用户身份的安全和可靠验证。
19 1
|
2月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
3月前
|
数据安全/隐私保护
在某网站的登录页面登录时如果选择“记住用户名”,登录成功后会跳转到一个中间层(页面代码将登录的用户名和密码存在cookie),中间页面中存在一个超链接,单击超链接可以链接到第三个页面查看信息。若选择“
该博客文章通过示例代码和运行结果截图,展示了网站登录过程中如何通过中间层页面使用cookies技术实现“记住用户名”功能,并在点击超链接后查看保存的用户名和密码信息。
在某网站的登录页面登录时如果选择“记住用户名”,登录成功后会跳转到一个中间层(页面代码将登录的用户名和密码存在cookie),中间页面中存在一个超链接,单击超链接可以链接到第三个页面查看信息。若选择“
|
3月前
|
存储 C#
【Azure APIM】APIM 策略语句如何读取请求头中所携带的Cookie信息并保存为变量
【Azure APIM】APIM 策略语句如何读取请求头中所携带的Cookie信息并保存为变量
|
3月前
|
存储
【Azure APIM】APIM 策略语句如何来设置多个Cookie值让浏览器保存
【Azure APIM】APIM 策略语句如何来设置多个Cookie值让浏览器保存
|
3月前
|
数据安全/隐私保护
|
3月前
|
Java 应用服务中间件 nginx
【Azure 环境】Azure应用程序网关设置set_Cookie=key=value; SameSite=Strict; HTTPOnly,AzureAD登录使用cookie时使用不了的案例记录
【Azure 环境】Azure应用程序网关设置set_Cookie=key=value; SameSite=Strict; HTTPOnly,AzureAD登录使用cookie时使用不了的案例记录