0

I am making a little script for communicate with a Jasper Report Server, but now I need to read it in Python.

This a fragment of the my Ruby Script:

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

This is a fragment of the My Python Script

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)

In Ruby script a can get a COOKIE like this:

cookie = resp['Set-Cookie']

How can I make this in Python?

Alex K
  • 22,315
  • 19
  • 108
  • 236
Luiz Carvalho
  • 1,549
  • 1
  • 23
  • 46

2 Answers2

1

Great! I found a simple Answer for my question examinee handler result

First

    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>>
}

After observing the variable headers of type httplib.HTTPMessage I found I could get the 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

So was only necessary make this:

cookie =  handle.headers["Set-Cookie"]

:D

Luiz Carvalho
  • 1,549
  • 1
  • 23
  • 46
0

This should work

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
Giorgos Komnino
  • 433
  • 1
  • 7
  • 20