我正在尝试访问python脚本中的查询字符串:在bash中我使用${QUERY_STRING}
环境变量访问它。
我遇到过这样的事情:https://stackoverflow.com/a/2764822/32836,但这个脚本由Apache2运行:
#!/usr/bin/python
print self.request.query_string
什么都不打印,在命令行中,它会产生这个错误:
$ ./testing.py
Traceback (most recent call last):
File "./testing.py", line 3, in <module>
print self.request.query_string
NameError: name 'self' is not defined
如何阅读 query_string ?
答案 0 :(得分:4)
如果您正在运行cgi脚本,只是想添加一个替代方法来访问QUERY_STRING
值,您可以执行以下操作:
import os
print "content-type: text/html\n" # so we can print to the webpage
print os.environ['QUERY_STRING']
我的测试和理解是,当URL中没有任何查询字符串时,这也有效,你只需要一个空字符串。
确认这是在2.7.6
上工作,查看所有环境变量,如:
#!/usr/bin/python
import os
print "Content-type: text/html\r\n\r\n";
print "<font size=+1>Environment</font><\br>";
for param in os.environ.keys():
print "<b>%20s</b>: %s<\br>" % (param, os.environ[param])
这段代码是从CGI Programming with Python上的TutorialsPoint tutorial获得的。
虽然,正如zombie_raptor_jesus所提到的,使用Python的CGI模块可能会更好,而使用FieldStorage可以更轻松。
再次从上面的教程:
# Import modules for CGI handling
import cgi, cgitb
# Create instance of FieldStorage
form = cgi.FieldStorage()
# Get data from fields
first_name = form.getvalue('first_name')
last_name = form.getvalue('last_name')
将保存查询字符串first_name=Bobby&last_name=Ray
答案 1 :(得分:3)
首先,'self'关键字只有在函数中定义时才可用,通常是对象的。通常使用与其他OOP语言中使用的“this”相同的方式。
现在,您尝试使用的代码片段用于Google App Engine,您尚未导入(也未安装,我认为)。由于您习惯使用环境变量,因此您可以执行以下操作:
#!/usr/bin/python
import os
print os.environ.get("QUERY_STRING", "No Query String in url")
但是,我建议你改用cgi模块。在此处阅读更多相关信息:http://docs.python.org/2/library/cgi.html
答案 2 :(得分:0)
export default class Db {
constructor (uri, callback) {
const mongo = process.env.MONGO || 'mongodb://localhost:27017'
this.mongodb = process.env.MONGO_DB || 'testing'
this.gfs = null
this.connection = MongoClient.connect(mongo, { useNewUrlParser: true })
this.connected = false
return this
}
async connect (msg) {
if (!this.connected) {
try {
this.connection = await this.connection
this.connection = this.connection.db(this.mongodb)
this.gfs = new mongo.GridFSBucket(this.connection)
this.connected = true
} catch (err) {
console.error('mongo connection error', err)
}
}
return this
}
async disconnect () {
if (this.connected) {
try {
this.connection = await this.connection.close()
this.connected = false
} catch (err) {
console.error('mongo disconnection error', err)
}
}
}
async dropDB () {
const Content = this.connection.collection('content')
await Content.deleteMany({})
}
}
with query_string ='k1 = val1&data = test' 它将回显:
import os
print('Content-Type: text/html\n\n<h1>Search query/h1>')
query_string = os.environ['QUERY_STRING']
SearchParams = [i.split('=') for i in query_string.split('&')] #parse query string
# SearchParams is an array of type [['key','value'],['key','value']]
# for example 'k1=val1&data=test' will transform to
#[['k1','val1'],['data','test']]
for key, value in SearchParams:
print('<b>' + key + '</b>: ' + value + '<br>\n')
答案 3 :(得分:0)
这是我在Python 3中从CGI(A)URL,(B)GET参数和(C)POST数据捕获的方式:
导入sys,os,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 == None):
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")
mySpy =“ myURLSelf:[” + str(myURLSelf)+“] \ n”
mySpy = mySpy +“ myQuerySelf:[” + str(myQuerySelf)+“] \ n”
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
==========================================
希望这可以为您提供帮助。