sidsinha has asked for the wisdom of the Perl Monks concerning the following question:

Hi,

I wrote a python code to fetch web pages by logging in, authenticating (using hashing) and then collecting some stats. I want to port this code to perl. Could anyone help me in quickly porting this code to perl or help me in getting equivalent functions for urllib2 and re. Below is the python code:

#!/usr/bin/python # -*- coding: utf-8 -*- import urllib, urllib2, re from struct import * import hashlib import os import sys import xmlrpclib #from win32com.shell import shellcon, shell from xml.dom import minidom def main(): tcp_connection_status("192.168.1.1") return 0 def tcp_connection_status(nodeip): username = 'uname' password = 'pass' response = '' response = urllib2.urlopen('https://' + nodeip + '/auth1.html') response_data = response.read() #print response_data id_obj = re.search('name=\"id\" value=\"[A-Za-z0-9]*\" size=',resp +onse_data).group(0) param1_obj = re.search('NAME=\"param1\" VALUE=\"[A-Za-z0-9]*\"',re +sponse_data).group(0) param2_obj = re.search('NAME=\"param2\" VALUE=\"[A-Za-z0-9]*\"',re +sponse_data).group(0) sessId_obj = re.search('NAME=\"sessId\" VALUE=\"[A-Za-z0-9]*\"',re +sponse_data).group(0) param1 = param1_obj.split('\"')[3] param2 = param2_obj.split('\"')[3] id = id_obj.split('\"')[3] sessId= sessId_obj.split('\"')[3] param1x = param1.decode("hex") idx = id.decode("hex") digest = hashlib.md5(idx+password+param1x).hexdigest() login_data = urllib.urlencode({'uName' : username, 'sessId' : sess +Id, 'digest' : digest, 'id' : id, 'pass' : ''}) request = urllib2.Request('https://' + nodeip + '/auth.cgi',login_ +data) request.add_header('Referer', 'http://' + nodeip + '/auth1.html') request.add_header('Cookie', 'SessId='+sessId) response = urllib2.urlopen(request).read() request = urllib2.Request('https://' + nodeip + '/outlookView.html +') request.add_header('Referer', 'http://' + nodeip + '/auth.cgi') request.add_header('Cookie', 'SessId='+sessId) response = urllib2.urlopen(request) response_data = response.read() #print response_data loginToken_obj = re.search('loginToken = \"[A-Za-z0-9]*\"',respons +e_data).group(0) loginToken = loginToken_obj.split('\"')[1] post_data = urllib.urlencode({'loginToken':loginToken, 'cgiaction' +:'none'}) request = urllib2.Request('https://' + nodeip + '/main.cgi',post_d +ata) request.add_header('Referer', 'http://' + nodeip + '/auth.cgi') request.add_header('Cookie', 'SessId='+sessId) response = urllib2.urlopen(request) response_data = response.read() post_data = urllib.urlencode({'loginToken':loginToken, 'action':'c +onnStats'}) request = urllib2.Request('https://' + nodeip + '/log',post_data) request.add_header('Cookie', 'SessId='+sessId) response = urllib2.urlopen(request) response_data = response.read() print response_data if __name__ == "__main__": sys.exit(main())

Replies are listed 'Best First'.
Re: UrlLib and urllib2 python to perl
by Anonymous Monk on Aug 13, 2013 at 03:10 UTC
      Looks like Web::Magic cant do https...

        Looks like Web::Magic cant do https...

        Sure, if you look with your eyes closed

      How could the below part be done in perl? the function of re.search
      id_obj = re.search('name=\"id\" value=\"[A-Za-z0-9]*\" size=',respons +e_data).group(0) param1_obj = re.search('NAME=\"param1\" VALUE=\"[A-Za-z0-9]*\"',re +sponse_data).group(0) param2_obj = re.search('NAME=\"param2\" VALUE=\"[A-Za-z0-9]*\"',re +sponse_data).group(0) sessId_obj = re.search('NAME=\"sessId\" VALUE=\"[A-Za-z0-9]*\"',re +sponse_data).group(0) param1 = param1_obj.split('\"')[3] param2 = param2_obj.split('\"')[3] id = id_obj.split('\"')[3] sessId= sessId_obj.split('\"')[3]

      Very good question.

      Indeed I use perl for lot of other things. So I want to use perl completely in my environment rather than have one script using perl n another for python.

      Also after this am planning to use CGI so perl will help me. Thanks
        ok Web::Magic looks great. is there an equivalent function for hashlib? Couldnt find any