2014-10-16 4 views
0

이상한 문제가 있습니다.파이썬의 요청으로 인코딩하기

나는 CGI 스크립트에 POST 요청의 일부로 사전을 전달하고있다 : 여기

self.settings = { 
    'SubmitCommands': ['C:\Python27\python.exe path\my_script.py'] 
} 

은 내 코드입니다 :

settings = self.settings 

    # Make web call to CGI script 
    user_agent = r'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' 
    headers = {'User-Agent' : user_agent, "Accept": "text/plain"} 
    response = requests.post(
      "path\CGI\cgi_script.py", 
      headers=headers, data=settings) 

그리고 여기 그 결과 추적입니다 :

Traceback (most recent call last): 
    File "path\CGI\cgi_script.py", line 119, in initi 
alizeJob 
    self.submitCommands = eval(inputSubmitCommands) 
    File "<string>", line 1 
    C:\Python27\python.exe path\my_script.py 
    ^
SyntaxError: invalid syntax 

그러나이 방법을 사용하면 구식이되지 않습니다.

settings = self.settings 

    # Set and encode parameters 
    params = urllib.urlencode(settings) 

    # Make web call to CGI script 
    user_agent = r'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' 
    headers = {'User-Agent' : user_agent, 
       "Content-type": "application/x-www-form-urlencoded", 
       "Accept": "text/plain"} 
    conn = httplib.HTTPConnection(self.host) 
    conn.request("POST", "path/CGI/cgi_script.py", params, headers) 
    response = conn.getresponse() 

오늘 새벽이라고해서 누군가가 스택 오버플로에서 라이브러리를 선택했다고 경고했습니다. 내가 그들 말을 들어야 만했던 것처럼 보입니다. 그러나 나는 무엇이 잘못되었는지 궁금합니다.

+0

'requests.post'와'conn.request'의 매개 변수는 실제로 경로입니까? 아니면 URL입니까? –

+0

매개 변수는 경로입니다. –

+0

매우 이상합니다. 내 컴퓨터에서 경로 ('requests.post ("/ tmp/CGI/cgi_script.py")')를 사용하면'MissingSchema : 잘못된 URL u '/ tmp/CGI/cgi_script.py'가 표시됩니다. 스키마 제공 '. –

답변

2

파이썬은 백 슬래시를 이스케이프 코드로 해석합니다. 그걸 수정하기 위해 두 배로 늘리십시오.

self.settings = { 
    'SubmitCommands': ['C:\\Python27\\python.exe path\\my_script.py'] 
} 
+0

또는 원시 문자열 r'C : \ Python27 ...을 사용하십시오. – zmo

관련 문제