0

我在某些代码上遇到了一些问题,试图获取 QUERY_STRING 但是当我查看控制台中的错误时,它会返回一个内部错误 500,这似乎是由该行引起的getReqStr = env_vars['QUERY_STRING']

有人知道如何解决这个问题吗?

import MySQLdb
import cgi, cgitb
from urlparse import urlparse

def index(req):

    req.add_common_vars()
    env_vars = req.subprocess_env
    getReqStr = env_vars['QUERY_STRING']           
    getReqArr = getReqStr.split('&')               
    getReqDict = {}

    for item in getReqArr:                          
       tempArr = item.split('=')                    
       getReqDict[tempArr[0]] = tempArr[1]
 
    dtbox = getReqDict['dt']
    tmbox = getReqDict['tm']

    con = MySQLdb.connect('localhost', 'root', '', 'mydb')

    with con:
        cur = con.cursor(MySQLdb.cursors.DictCursor)
        st = "SELECT tmp, watts FROM currentcost WHERE dt ='" + dtbox + "' and tm like '" + tmbox + "%'"
        cur.execute (s)
        rows = cur.fetchall()

        x=""
        y=""
        for row in rows:
            x=x+row["watts"]+","
            y=y+row["tmp"]+","

    x="data:["+x+"]"
    y="data:["+y+"]"

    con.close()

    req.write(st)

编辑。

这是我通过 Chrome 控制台返回的响应:

MOD_PYTHON ERRORProcessId:3424Interpreter:'127.0.1.1'ServerName:'127.0.1.1'DocumentRoot:'/var/www'URI:'/currentcost.py'位置:NoneDirectory:'/var/www/'文件名:'/var/ www/currentcost.py'PathInfo: ''Phase: 'PythonHandler'Handler: 'mod_python.publisher' Traceback (最近一次调用最后): File "/usr/lib/python2.7/dist-packages/mod_python/importer.py ",第 1537 行,在 HandlerDispatch default=default_handler,arg=req,silent=hlist.silent) 文件 "/usr/lib/python2.7/dist-packages/mod_python/importer.py",第 1229 行,在 _process_target 结果 = _execute_target(config, req, object, arg) 文件“/usr/lib/python2.7/dist-packages/mod_python/importer.py”,第 1128 行,在 _execute_target 结果 = object(arg) 文件“/usr/lib/python2.7/dist-packages/mod_python/publisher.py”,第 204 行,在处理程序模块 = page_cache[req] 文件“/usr/lib/python2. 7/dist-packages/mod_python/importer.py”,第 1059 行,在getitem return import_module(req.filename) File "/usr/lib/python2.7/dist-packages/mod_python/importer.py", line 296, in import_module log, import_path) File "/usr/lib/python2.7/ dist-packages/mod_python/importer.py",第 680 行,在 import_module execfile(file, module.dict ) 文件 "/var/www/currentcost.py",第 17 行 getReqStr = env_vars['QUERY_STRING'] ' 之后的 url这 ?^语法错误:扫描字符串时 EOL MODULE CACHE DETAILSAccessed:Thu Sep 26 09:18:30 2013Generation: 0_mp_545c0d0056a74a40503ad1da7dbb26e2 { FileName: '/var/www/currentcost.py' Instance: 1 [IMPORT] Generation: 0 [ERROR] Modified: Thu 2013 年 9 月 26 日 09:10:57}

4

1 回答 1

2

如果您正在使用mod_python,那么req.args可能拥有您的所有数据。

您还可以使用以下方法获取 query_stringreq.parsed_uri[apache.URI_QUERY]

如果您需要处理 GET 和POST而不考虑它,那么您最好使用与mod_python. 应该是这样的:

from mod_python import util

getReqDict = util.FieldStorage(req)
dtbox = getReqDict['dt']
tmbox = getReqDict['tm']

作为对代码的额外观察:构建 SQL 查询的方式不安全并且容易受到SQL 注入的影响。不要忘记在传递给 SQL 查询之前转义您的数据,或者改用查询参数绑定(首选方法)。

于 2014-12-12T17:15:11.333 回答