如何在Python网页中获取当前URL?

17 投票
2 回答
29152 浏览
提问于 2025-04-17 13:22

我刚开始学Python,刚安装好,花了两个小时在网上查怎么把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被打印出来。


根据Alex的回答,最终的代码是:

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

2 个回答

3

下面是我在Python 3中如何从CGI获取(A)网址、(B)GET参数和(C)POST数据的方法:

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

首先,我们需要导入一些库:

import sys, os, io

获取网址

我们可以通过以下方式获取当前的域名:

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

然后获取路径信息:

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

最后,把域名和路径组合成完整的网址:

myURLSelf = myDomainSelf + myPathSelf

获取GET数据

要获取GET请求的数据,可以这样做:

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

获取POST数据

获取POST请求的数据稍微复杂一点,首先我们需要知道数据的总字节数:

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

接下来,我们检查这个值是否为空:

if (myTotalBytesStr == None):

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

如果不为空,说明有数据:

else:

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

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

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

将原始数据写入文件

我们准备一个字符串来保存我们获取的信息:

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

接着,把GET数据也加进去:

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

然后,如果我们有POST数据,也把它加上:

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

你需要在这里定义自己的路径

我们定义一个文件名来保存这些数据:

myFilename = "spy.txt"

然后设置文件的完整路径:

myFilePath = myPath + "\" + myFilename

接下来,打开这个文件准备写入:

myFile = open(myFilePath, "w")

把之前准备好的数据写入文件:

myFile.write(mySpy)

最后,关闭文件:

myFile.close()

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

这里还有一些其他有用的CGI环境变量:

AUTH_TYPE

CONTENT_LENGTH

CONTENT_TYPE

GATEWAY_INTERFACE

PATH_INFO

PATH_TRANSLATED

QUERY_STRING

REMOTE_ADDR

REMOTE_HOST

REMOTE_IDENT

REMOTE_USER

REQUEST_METHOD

SCRIPT_NAME

SERVER_NAME

SERVER_PORT

SERVER_PROTOCOL

SERVER_SOFTWARE

12

如果你没有现成的库来帮你处理这个问题,你可以通过浏览器发送给你脚本的HTTP请求来构建当前的URL。

你需要关注的头信息是 Host 和在HTTP方法后面的内容(在你的情况下,可能是 GET)。这里有一些更详细的解释(这是第一个看起来不错的链接,你也可以自己去谷歌搜索更多信息 :)。

这个回答告诉你如何在CGI脚本中获取这些头信息:

如果你是在CGI环境下运行,你不能直接读取HTTP头信息,但网络服务器会把很多信息放到环境变量里供你使用。你只需要从 os.environ[] 中提取出来就可以了。

如果你只是把这个当作练习,那没问题,因为你会了解背后的原理。但如果你在构建一些可以重复使用的东西,我建议你使用库或框架,这样就不用每次都从头开始做同样的事情。

撰写回答