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

以下Java http get请求的等效Python代码,python,httplib,Python,Httplib,我正在尝试将以下Java代码转换为Python。不确定我做错了什么,但我最终在python中遇到了一个内部服务器错误500 httplib.httpConnection方法中的“body”是否等同于Javahttpentity? 对可能出现的问题还有其他想法吗? 我收集的输入信息肯定是正确的 任何帮助都将不胜感激。我尝试了几种方法,但最终还是出现了相同的内部服务器错误 Java代码: HttpEntity reqEntitiy = new StringEntity("loginTicket="+

我正在尝试将以下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

你不需要走这么低的水平。改为使用
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
负责URL编码URL查询字符串参数并将其添加到URL中,就像Java一样。

您在这里做的低级工作太多了。为什么不直接使用
urllib2.urlopen()
?或者更好的是,安装并使用它,我发现Java代码和Python代码之间几乎没有关联。您正在请求正文中发送
loginTicket
,但
GET
不允许请求正文。您需要在此处使用URL查询参数。感谢您的回复。urllib2是我的第一选择。但我不知道如何使用httpentity字符串-“loginTicket=“+ticket”。您能给我一些建议吗?我使用了与上面完全相同的代码,但出现了下面的错误。@user3425922:第一个示例中缺少了一个
,现已修复。我使用了与上面完全相同的代码,但遇到了下面的错误。我可以通过浏览器访问url(我已登录到会话)。想法“C:\Users\student\AppData\Local\enthught\Canopy\App\AppData\Canopy-1.5.2.2785.win-x86\u 64\lib\urllib2.py”,第531行,在原始代码的http\u error\u default raise HTTPError(req.get\u full\u url(),code,msg,hdrs,fp)中,我修复了缺失的内容)。这是另一个错误。我可以通过浏览器访问url(我已登录会话)。所以我不确定为什么会出现http错误。我也不知道,因为我看不到服务器返回的引发该异常的状态代码。
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