2017-11-29 8 views
0

Windows 'CMD를 통해 실행할 때 다음 컬 요청이 완벽하게 작동합니다. 파이썬 버전이 Python에서 500 서버 오류를 반환하는 컬 포스트 요청

response = urllib.request.urlopen(req) 
File "C:\Python\Python35\lib\urllib\request.py", line 163, in urlopen 
return opener.open(url, data, timeout) 
File "C:\Python\Python35\lib\urllib\request.py", line 472, in open 
response = meth(req, response) 
File "C:\Python\Python35\lib\urllib\request.py", line 582, in http_response 
'http', request, response, code, msg, hdrs) 
File "C:\Python\Python35\lib\urllib\request.py", line 510, in error 
return self._call_chain(*args) 
File "C:\Python\Python35\lib\urllib\request.py", line 444, in _call_chain 
result = func(*args) 
File "C:\Python\Python35\lib\urllib\request.py", line 590, in 
http_error_default 
raise HTTPError(req.full_url, code, msg, hdrs, fp) 
urllib.error.HTTPError: HTTP Error 500: Server Error 

누군가가 말해 줄 수

서버 오류를 반환하지만 내가 파이썬 3에서 같은 통화를 사용 urllib.requests
import urllib.request 

values = {'query':'SELECT DISTINCT(event) FROM programs'} 
url = 'http://my_url:8082/druid/v2/sql' 

data = urllib.parse.urlencode(values).encode("utf-8") 
req = urllib.request.Request(url, data) 
req.add_header("Content-Type","application/json") 
response = urllib.request.urlopen(req) 
the_page = response.read() 

을 복제하는 것을 시도하고있다

curl -XPOST -H"Content-Type:application/json" http://my_url:8082/druid/v2/sql/ -d "{\"query\":\"SELECT DISTINCT(event) FROM programs\"}" 

무엇 나 잘못하고있어?

답변

1

데이터를 json으로 먼저 변환해야하며 사전을 보내야합니다.

import requests 

d = {'query':'SELECT DISTINCT(event) FROM programs'} 
url = 'http://my_url:8082/druid/v2/sql' 

r = requests.post(url, json=d) 
r.raise_for_status() 

print(r.text) 
+0

감사합니다. 두 번째 방법은 효과가 있지만 첫 번째 방법은 효과가 없습니다. 좀 더 실험을 한 후 urlencode 부분이 필요 없다는 것을 알게되었습니다. 아래에 올바른 버전을 게시했습니다. – ganninu93

0

좀 더 실험 후, 나는 json.dumps와 urllib.parse.urlencode를 대체하여 코드가 작동하도록 관리 :

import json 

data = urllib.parse.urlencode(json.dumps(values)).encode("utf-8") 

하거나, requests library (가) 사용합니다. 이제 코드는 다음과 같이 표시됩니다.

import urllib.request, json 

values = {'query':'SELECT DISTINCT(event) FROM programs'} 
url = 'http://my_url/druid/v2/sql' 

data = json.dumps(values).encode("utf-8") 
req = urllib.request.Request(url, data) 
req.add_header("Content-Type","application/json") 
response = urllib.request.urlopen(req) 
the_page = response.read()