以下Java http获取请求的等效Python代码

问题描述 投票:0回答:1

我正在尝试将以下Java代码转换为Python。不知道我在做什么错,但是我最终在python中遇到内部服务器错误500。

httplib.httpConnection方法中的“ body”是否等效于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
python httplib
1个回答
0
投票

您不需要走低级别。改用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 library来简化此操作:

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 就像对Java一样,对URL查询字符串参数进行URL编码并将其添加到URL中。

© www.soinside.com 2019 - 2024. All rights reserved.