我正在制作一个与Jasper Report Server通信的小脚本,但现在我需要用Python阅读它。
这是我的Ruby脚本的一个片段:
def get_uuid_and_cookie
body = ""
cookie = ""
puts "FULL URL: #{"#{REPORT_PATH}/reports/#{REPORT_GROUP}/#{REPORT_NAME}"}"
uri = URI.parse("#{REPORT_PATH}/reports/#{REPORT_GROUP}/#{REPORT_NAME}")
http = Net::HTTP.new(uri_put.host, uri_put.port)
http.start do |http|
req = Net::HTTP::Put.new(uri_put.path + "?RUN_OUTPUT_FORMAT=#{FORMAT}")
puts "ACESSANDO: #{uri_put.path}?RUN_OUTPUT_FORMAT=#{FORMAT}"
req.basic_auth(SERVER_USER, SERVER_PASSWORD)
req.body = build_xml_request
resp = http.request(req)
body = resp.body
puts "COOKIE RECEBIDO: #{resp['Set-Cookie']}"
cookie = resp['Set-Cookie']
end
这是My Python脚本的一个片段
def get_uuid_and_cookie():
handle = None
req = urllib2.Request(REPORT_URI+"reports/"+REPORT_GROUP+"/"+REPORT_NAME+"/")
base64string = base64.encodestring('%s:%s' % (SERVER_USER, SERVER_PASSWORD))[:-1]
authheader = "Basic %s" % base64string
req.add_header("Authorization", authheader)
req.get_method = lambda: 'PUT'
req.data = build_xml_request()
try:
handle = urllib2.urlopen(req)
except IOError, e:
print "ERROR: "+str(e)
在Ruby脚本中,a可以获得这样的COOKIE:
cookie = resp['Set-Cookie']
我怎样才能在Python中创建它?
答案 0 :(得分:1)
大! 我找到了一个简单的答案,我的问题考生处理程序结果
第一
print str(handle.__dict__)
{
'fp': <socket._fileobject object at 0x7f0b44d534d0>,
'fileno': <bound method _fileobject.fileno of <socket._fileobject object at 0x7f0b44d534d0>>,
'code': 201,
'read': <bound method _fileobject.read of <socket._fileobject object at 0x7f0b44d534d0>>,
'readlines': <bound method _fileobject.readlines of <socket._fileobject object at 0x7f0b44d534d0>>,
'next': <bound method _fileobject.next of <socket._fileobject object at 0x7f0b44d534d0>>,
'headers': <httplib.HTTPMessage instance at 0x7f0b44d6bef0>,
'__iter__': <bound method _fileobject.__iter__ of <socket._fileobject object at 0x7f0b44d534d0>>,
'url': 'http://127.0.0.1:8080/jasperserver/rest/report/reports/Athenas/protocolo/', 'msg': 'Created',
'readline': <bound method _fileobject.readline of <socket._fileobject object at 0x7f0b44d534d0>>
}
观察httplib.HTTPMessage类型的变量标题后 我发现我可以获得Set-Cookie。
print handle.headers
Server: Apache-Coyote/1.1
Pragma: No-cache
Cache-Control: no-cache
Expires: Wed, 31 Dec 1969 16:00:00 PST
P3P: CP="ALL"
Set-Cookie: JSESSIONID=92826DC36E6DB54164C47744FE1605CB; Path=/jasperserver
Content-Type: text/xml;charset=UTF-8
Content-Length: 256
Date: Wed, 06 Mar 2013 13:19:26 GMT
Connection: close
所以只需要这样做:
cookie = handle.headers["Set-Cookie"]
:d
答案 1 :(得分:0)
这应该有效
import urllib2
from cookielib import CookieJar
cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
response = opener.open(my_url)
if response.getcode() == 200:
print 'now cj is the cookie'
for c in cj:
print c.name