如何在Python网页中获取当前URL?
我刚开始学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 个回答
下面是我在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
如果你没有现成的库来帮你处理这个问题,你可以通过浏览器发送给你脚本的HTTP请求来构建当前的URL。
你需要关注的头信息是 Host
和在HTTP方法后面的内容(在你的情况下,可能是 GET
)。这里有一些更详细的解释(这是第一个看起来不错的链接,你也可以自己去谷歌搜索更多信息 :)。
这个回答告诉你如何在CGI脚本中获取这些头信息:
如果你是在CGI环境下运行,你不能直接读取HTTP头信息,但网络服务器会把很多信息放到环境变量里供你使用。你只需要从
os.environ[]
中提取出来就可以了。
如果你只是把这个当作练习,那没问题,因为你会了解背后的原理。但如果你在构建一些可以重复使用的东西,我建议你使用库或框架,这样就不用每次都从头开始做同样的事情。