Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

UrlLib and urllib2 python to perl

by sidsinha (Acolyte)
on Aug 13, 2013 at 03:01 UTC ( [id://1049200]=perlquestion: print w/replies, xml ) Need Help??

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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://1049200]
Approved by Loops
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (4)
As of 2024-04-19 23:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found