Эквивалентный код Python для следующих запросов HTTP http Java
Я пытаюсь преобразовать следующий код Java в Python. Не уверен, что я делаю неправильно, но я получаю внутреннюю ошибку сервера 500 с python.
Является ли "тело" в httplib.httpConnection
метод, эквивалентный Java httpentity
? Есть еще мысли о том, что может быть не так? Входная информация, которую я собираю, верна.
Любая помощь будет по достоинству оценена. Я пробовал несколько вещей, но в конечном итоге с той же внутренней ошибкой сервера.
Java-код:
HttpEntity reqEntitiy = new StringEntity("loginTicket="+ticket);
HttpRequestBase request = reMethod.getRequest(uri, reqEntitiy);
request.addHeader("ticket", ticket);
HttpResponse response = httpclient.execute(request);
HttpEntity responseEntity = response.getEntity();
StatusLine responseStatus = response.getStatusLine();
Код Python:
url = serverURL + "resources/slmservices/templates/"+templateId+"/options"
#Create the request
ticket = ticket.replace("'",'"')
headers = {"ticket":ticket}
print "ticket",ticket
reqEntity = "loginTicket="+ticket
body = "loginTicket="+ticket
url2 = urlparse.urlparse(serverURL)
h1 = httplib.HTTPConnection(url2.hostname,8580)
print "h1",h1
url3 = urlparse.urlparse(url)
print "url path",url3.path
ubody = {"loginTicket":ticket}
data = urllib.urlencode(ubody)
conn = h1.request("GET",url3.path,data,headers)
#conn = h1.request("GET",url3.path)
response = h1.getresponse()
lines = response.read()
print "response.status",response.status
print "response.reason",response.reason
1 ответ
Вам не нужно идти на этот низкий уровень. С помощью urllib2
вместо:
import urllib2
from urllib import urlencode
url = "{}resources/slmservices/templates/{}/options".format(
serverURL, templateId)
headers = {"ticket": ticket}
params = {"loginTicket": ticket}
url = '{}?{}'.format(url, urlencode(params))
request = urllib2.Request(url, headers=headers)
response = urllib2.urlopen(request)
print 'Status', response.getcode()
print 'Response data', response.read()
Обратите внимание, что параметры добавляются в URL для формирования параметров запроса URL.
Вы можете сделать это еще проще, установив requests
библиотека:
import requests
url = "{}resources/slmservices/templates/{}/options".format(
serverURL, templateId)
headers = {"ticket": ticket}
params = {"loginTicket": ticket}
response = requests.get(url, params=params, headers=headers)
print 'Status', response.status
print 'Response data', response.content # or response.text for Unicode
Вот requests
заботится о кодировании URL-адреса параметров строки запроса URL-адреса и добавлении его в URL-адрес, как это делает Java.