获取Python中的客户端地址
我的问题是:我用Python创建了网页(里面有HTML代码),每个页面都有一个按钮可以跳转到下一个页面。 请问,在提交HTML表单时,有没有办法获取客户端的地址呢? 我的意思是,能不能把客户端的地址放到URL里。
如果可以的话,我会展示我的代码,否则我就删掉我的问题。
这是我的HTML代码:
ip = cgi.escape(os.environ["REMOTE_ADDR"])
<html>
path install: ${install_path}<br/><br/>
os: ${os}<br/><br/>
unix user: ${user_name}<br/><br/>
<form name="sd" method="get" action="ip/cgi/scriptGet.py">
Name: <input type="text" name="name"><br/><br/>
Pseudo: <input type="text" name="pseudo"/><br/><br/>
<input type="submit" value="OK"/>
</form>
这是我的Python代码:
import os, sys, platform, getpass, tempfile
import webbrowser
import string
import json
import cgi, cgitb, os
def main( server_IP,install_path):
template = open('scriptHmtl.phtml').read()
contenu = string.Template(template).substitute(
install_path = install_path,
os = user_os,
user_name = user_login
)
if __name__ == "__main__":
server_IP = sys.argv[1]
install_path = sys.argv[2]
main(server_IP,install_path)
2 个回答
客户端的IP地址(我想你说的“客户端地址”就是指这个)是在TCP/IP层面上传递给你的服务器的。如果你使用的是CGI(根据你评论中的一些信息来看,似乎是这样),那么这个地址应该可以在CGI脚本的环境中找到,变量名是REMOTE_ADDR
(具体可以参考http://www.ietf.org/rfc/rfc3875,第4.1.8节)。在Python中,访问环境变量的方法是用os.environ
(可以查看https://docs.python.org/2/library/os.html#os.environ)。
需要注意的是,因为CGI脚本可以访问这个地址,所以你不需要把它添加到URL、查询字符串或者(在POST或PUT请求的情况下)请求的主体中。
另外,如果你的服务器是通过代理、负载均衡器等访问的,REMOTE_ADDR
可能不是实际的客户端IP,这时你需要查看HTTP请求的头部,找找是否有X-Forwarded-For
这个头部,具体可以参考http://en.wikipedia.org/wiki/X-Forwarded-For。这个头部(如果存在的话)应该可以像REMOTE_ADDR
或其他请求头一样访问,但可能会被重命名为HTTP_X_FORWARDED_FOR
,具体可以参考http://www.ietf.org/rfc/rfc3875.txt的第4.1和4.1.18节。
你可以使用 cgi
和 REMOTE_ADDR
,用法如下:
cgi.escape(os.environ["REMOTE_ADDR"])
把这个放到一个变量里,然后在你的 HTML 表单的操作中调用这个变量……