13

我是 Python 的菜鸟。刚刚安装它,花了 2 个小时在谷歌上搜索如何获取在 URL 中发送到 Python 脚本的简单参数

找到这个

非常有帮助,除了我无法为世界上任何事情弄清楚如何替换

import urlparse
url = 'http://foo.appspot.com/abc?def=ghi'
parsed = urlparse.urlparse(url)
print urlparse.parse_qs(parsed.query)['def']

用什么替换 url = 'string' 使其工作?我只想访问http://site.com/test/test.py?param=abc并查看打印的 abc。


亚历克斯回答后的最终代码:

url = os.environ["REQUEST_URI"] 
parsed = urlparse.urlparse(url) 
print urlparse.parse_qs(parsed.query)['param']
4

2 回答 2

10

如果您没有任何库可以为您执行此操作,您可以从通过浏览器发送到您的脚本的 HTTP 请求构建您当前的 URL。

您感兴趣的标头Host以及 HTTP 方法之后的任何内容(可能GET,在您的情况下)。这里有一些更多的解释(第一个链接看起来不错,你可以自由地谷歌一些:)。

此答案向您展示了如何获取 CGI 脚本中的标题:

如果您作为 CGI 运行,则无法直接读取 HTTP 标头,但 Web 服务器会将大部分信息放入环境变量中。你可以从中挑选出来os.environ[]

如果您将此作为练习进行,那很好,因为您将了解幕后的内容。如果您正在构建任何可重用的东西,我建议您使用库或框架,这样您就不会在每次需要某些东西时都重新发明轮子。

于 2013-01-22T22:17:10.550 回答
2

这就是我在 Python 3 中从 CGI (A) URL、(B) GET 参数和 (C) POST 数据中捕获的方式:

==================================================== =====

导入系统、操作系统、io

捕获网址

myDomainSelf = os.environ.get('SERVER_NAME')

myPathSelf = os.environ.get('PATH_INFO')

myURLSelf = myDomainSelf + myPathSelf

捕获获取数据

myQuerySelf = os.environ.get('QUERY_STRING')

捕获发布数据

myTotalBytesStr=(os.environ.get('HTTP_CONTENT_LENGTH'))

如果(myTotalBytesStr == 无):

myJSONStr = '{"error": {"value": true, "message": "No (post) data received"}}'

别的:

myTotalBytes=int(os.environ.get('HTTP_CONTENT_LENGTH'))

myPostDataRaw = io.open(sys.stdin.fileno(),"rb").read(myTotalBytes)

myPostData = myPostDataRaw.decode("utf-8")

将RAW写入文件

mySpy = "myURLSelf: [" + str(myURLSelf) + "]\n"

mySpy = mySpy + "myQuerySelf: [" + str(myQuerySelf) + "]\n"

mySpy = mySpy + "myPostData: [" + str(myPostData) + "]\n"

您需要在此处定义自己的 myPath

我的文件名 = “间谍.txt”

我的文件路径 = 我的路径 + "\" + 我的文件名

我的文件 = 打开(我的文件路径,“w”)

myFile.write(mySpy)

我的文件.close()

==================================================== =====

以下是一些其他有用的 CGI 环境变量:

AUTH_TYPE

CONTENT_LENGTH

内容类型

GATEWAY_INTERFACE

PATH_INFO

PATH_TRANSLATED

请求参数

远程地址

远程主机

REMOTE_IDENT

REMOTE_USER

REQUEST_METHOD

SCRIPT_NAME

服务器名称

服务器端口

SERVER_PROTOCOL

服务器软件

于 2019-01-23T01:04:09.810 回答