2013-09-26 1 views
0

일부 코드에서 QUERY_STRING을 얻으려는 중 일부 문제가 있습니다.하지만 콘솔의 오류를 볼 때 내부 오류 500이 발생하여이 오류가 발생하는 것으로 보입니다. 줄 getReqStr = env_vars['QUERY_STRING']mod_python 및 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) 

EDIT.

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 : ''단계 : 'PythonHandler'Handler :'mod_python.publisher'Traceback (마지막 호출 마지막) : 파일 "/usr/lib/python2.7/dist-packages/mod_python/importer.py", 1537 줄, HandlerDispatch 기본 = default_handler, arg = req, silent = hlist.silent) 파일 "/ usr/lib/python2 /etr/lib/python2.7/dist-packages/mod_python/importer에서 ".7/dist-packages/mod_python/importer.py", 1229 번 줄을 참조하십시오. py ", 1128 줄, _execute_targe t result = 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) 파일"/usr/lib/python2.7/dist-packages/mod_python/importer.py "줄 296 in import_module log, import_path) import_module execfile (file, module.)의 "/usr/lib/python2.7/dist-packages/mod_python/importer.py"파일의 680 행을 참조하십시오. dict) 파일 "/var/www/currentcost.py", 17 행 getReqStr = env_vars [ 'QUERY_STRING'] '뒤에 URL?^SyntaxError : EOL을 검색하는 동안 문자열 리터럴 모델 캐시 세부 액세스 날짜 : 2010 년 9 월 26 일 09:18:30 2013Generation : 0_mp_545c0d0056a74a40503ad1da7dbb26e2 {FileName : '/var/www/currentcost.py'인스턴스 : 1 [가져 오기] 생성 : 0 [오류] 수정 됨 : 목 Sep 26 09:10:57 2013}

+1

'QUERY_STRING'은'env_vars'에도 존재하지 않을 수 있습니다. 아마도 'KeyError' 예외를 발생시킬 수 있습니다 ... 전체 추적을 할 수 있습니까? –

+0

@Andre 전체 추적으로 소식을 업데이트했습니다. –

답변

2

mod_python을 사용하는 경우 req.args에 모든 데이터가 포함되어있을 수 있습니다.

당신은 또한 당신이 더 나은 mod_python와 함께 번들로 FieldStorage 클래스를 사용하여 구문 분석, 당신이 그것에 대해 생각하지 않고 GET과 POST 처리해야하는 경우 req.parsed_uri[apache.URI_QUERY]

를 사용하여 QUERY_STRING 얻을 수 있습니다.

from mod_python import util 

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

코드의 추가 관찰로 :이 같은이어야한다 방법 당신은 당신의 SQL의 안전하지 않은 쿼리 및 SQL injection에 취약를 구축 할 수 있습니다. SQL 쿼리로 전달하기 전에 데이터를 이스케이프 처리하거나 query parameter binding (기본 설정 메서드)을 대신 사용하십시오.

관련 문제