2011-09-27 2 views
1

내 (벙어리) 문제에 대한 해결책을 발견하고 아래에 나열했습니다.environ [ 'QUERY_STRING']이 (가) 길이가 0 인 문자열을 반환하는 이유는 무엇입니까?

저는 Ubuntu 11.04에서 Python 2.7.1 이상을 사용하고 있습니다. 클라이언트/서버가 동일한 컴퓨터에 있습니다.

윙 디버거에서 서버 코드가 호출되고 있으며 한 번에 한 줄씩 코드를 처리 할 수 ​​있다는 것을 알고 있습니다. 이 예에서는 22 바이트가 전송되었음을 압니다.

Parameter application/x-www-form-urlencoded 
fname first 
lname last 
Source 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 22 fname=first&lname=last 

이 내가 사용하고 클라이언트 코드 :

<html> 
    <form action="addGraphNotes.wsgi" method="post"> 
     First name: <input type="text" name="fname" /><br /> 
     Last name: <input type="text" name="lname" /><br /> 
     <input type="submit" value="Submit" /> 
    </form> 
</html> 

는 그리고이 서버 코드 :

방화범

, 나는 인터넷 게시 탭에서이 데이터를 보았다
import urlparse 

def application(environ, start_response): 
    output = [] 

    # the environment variable CONTENT_LENGTH may be empty or missing 
    try: 
    # NOTE: THIS WORKS. I get a value > 0 and the size appears correct (22 bytes in this case) 
     request_body_size = int(environ.get('CONTENT_LENGTH', 0)) 
    except (ValueError): 
     request_body_size = 0 

    try: 
     # environ['QUERY_STRING'] returns "" 
     **values = urlparse.parse_qs(environ['QUERY_STRING'])** 
    except: 
     output = ["parse error"] 

윙 디버거에서 데이터가 클라이언트에서 서버로 전달되고 있음을 확인했습니다 :

>>> environ['wsgi.input'].read() 
'fname=first&lname=last' 

문제가 생겼습니다. 나는 실수로 기록을 남겼다. 이것은 형식을 사용하는 코드이지만 AJAX를 사용하고 FORMS를 사용하면 시작할 때 추가하는 것을 중지하십시오. 자, 모든 것이 잘 작동합니다.

# When the method is POST the query string will be sent 
# in the HTTP request body which is passed by the WSGI server 
# in the file like wsgi.input environment variable. 
request_body = environ['wsgi.input'].read(request_body_size) 

values = parse_qs(request_body) 
+0

'환경'전체를 인쇄 해 보았습니까? –

+0

자세한 내용은 편집 된 질문보기 – Jarek

답변

3

당신은 QUERY_STRING 실제로 그것이 GET 요청의 쿼리 문자열 (그것은 또한 다른 요청 유형에 나타날 수를 나타냅니다 있지만에서 문제에 관련되지 않은 비어가 될 것입니다 있도록 POST 질의를하고있는 손). wsgi.input 스트림을 사용하여 POST 데이터를 구문 분석해야합니다.

+0

'get'을 시도했지만 아무 것도 변경되지 않았습니다. 이전에 작성한 다른 모든 양식/제출 코드는 '게시물'을 사용했으며 코드는 정상적으로 작동했습니다. 이 기계에서 뭔가 '고장났다'고 나는 그것이 무엇인지 알아 내지 못합니다. – Jarek

+0

나는 내 양식에서 게시물을 사용하여 모든 것을 제출했으며 모든 것이 잘 작동했습니다. 이 컴퓨터를 사용할 때까지. – Jarek

관련 문제