Advertisement
Narzew

Post Requester 1.2

Jun 10th, 2015
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 3.69 KB | None | 0 0
  1. #=======================================================================
  2. #**Post Requester
  3. #**Copyright 09.06.2015 Narzew
  4. #**v 1.2
  5. #=======================================================================
  6.  
  7. require 'net/http'
  8. require 'uri'
  9. require 'digest/md5'
  10. require 'digest/sha1'
  11.  
  12. module PostRequester
  13.  
  14.     $logfile = "postrequester_log.txt"
  15.     $nolog = false
  16.    
  17.     def self.show_help
  18.         print "Usage: postrequester.rb URL field=value field=value !flag=value\n"
  19.         print "Available flags:\n"
  20.         print "sc=pat - Split center - remove all before first and after second pattern\n"
  21.         print "sr=pat - Split right - remove all before pattern\n"
  22.         print "sl=pat - Split left - remove all after pattern\n"
  23.         print "port=nr - Change port number\n"
  24.         print "nolog=1 - Do not log requests\n"
  25.         print "log=file - Change logfile to file\n"
  26.         print "sha1=field=value - Hash value with SHA1\n"
  27.         print "md5=field=value - Hash value with MD5\n"
  28.     end
  29.    
  30.     def self.print_error(x)
  31.         print "Error: #{x}\n"
  32.         self.show_help
  33.     end
  34.    
  35.     def self.to2digit(x)
  36.         if(x.to_i<10)
  37.             return "0#{x}"
  38.         else
  39.             return "#{x}"
  40.         end
  41.     end
  42.    
  43.     def self.return_response(x)
  44.         print "#{x}\n"
  45.         if $nolog == false
  46.             begin
  47.                 resp = "#{self.to2digit(Time.now.day)}-#{self.to2digit(Time.now.month)}-#{self.to2digit(Time.now.year)} #{self.to2digit(Time.now.hour)}:#{self.to2digit(Time.now.min)}:#{self.to2digit(Time.now.sec)} #{ARGV.join(" ")} => #{x}\n"
  48.                 File.open($logfile, "a"){|w| w.write(resp) }
  49.             rescue
  50.                 print "Warning: Failed to log response."
  51.             end
  52.         end
  53.     end
  54.  
  55.     def self.start
  56.         count = 0
  57.         fields = {}
  58.         flags = {}
  59.         ARGV.each{|x|
  60.             if count == 0
  61.                 $url = x
  62.                 count +=1
  63.                 next
  64.             end
  65.             if x.include?("=")
  66.                 data = x.split("=")
  67.                 if data.at(0)[0] == "!"
  68.                     # Field is flag
  69.            
  70.                     # Special flag treatmnet
  71.                     if data.at(0) == "!sha1"
  72.                         fields[data.at(1)] = Digest::SHA1.hexdigest(data.at(2))
  73.                     elsif data.at(0) == "!md5"
  74.                         fields[data.at(1)] = Digest::MD5.hexdigest(data.at(2))
  75.                     elsif data.at(0) == "!file"
  76.                         if File.exist?(data.at(2))
  77.                             fields[data.at(1)] = File.read(data.at(2))
  78.                         else
  79.                             print_error("File #{data.at(2)} don't exist!")
  80.                         end
  81.                     else
  82.                         #Normal flag treatment
  83.                         flags[data.at(0).gsub("!","")] = data.at(1)
  84.                     end
  85.                 else
  86.                     # Field is key=value field
  87.                     fields[data.at(0)] = data.at(1)
  88.                 end
  89.             else
  90.                 if x.include?("!")
  91.                     flags[x[0].gsub("!","")] = ""
  92.                 else
  93.                     self.print_error("Invalid parameter: "+x)
  94.                     PostRequester.show_help
  95.                 end
  96.             end
  97.             count += 1
  98.         }
  99.        
  100.         # Parse fields
  101.         uri = URI($url)
  102.         if flags.include?("nolog")
  103.             if flags["nolog"] == "0" || flags["nolog"].downcase == "false"
  104.                 $nolog = false
  105.             else
  106.                 $nolog = true
  107.             end
  108.         end
  109.         if flags.include?("log")
  110.             $logfile = flags["log"]
  111.         end
  112.         if flags.include?("clear")
  113.             File.delete($logfile)
  114.         end
  115.         if flags.include?("port")
  116.             https = Net::HTTP.new(uri.host, flags["port"])
  117.         else
  118.             https = Net::HTTP.new(uri.host, uri.port)
  119.         end
  120.         response = https.post($url, URI.encode_www_form(fields))
  121.         result = response.body
  122.         if flags.include?("sc")
  123.             result2 = result.split(flags["sc"])[1].to_s
  124.             result2 = result2.split(flags["sc"])[0].to_s
  125.             self.return_response(result2)
  126.         elsif flags.include?("sl")
  127.             result2 = result.split(flags["sl"])[0].to_s
  128.             self.return_response(result2)
  129.         elsif flags.include?("sr")
  130.             result2 = result.split(flags["sr"])[1].to_s
  131.             self.return_response(result2)
  132.         else
  133.             self.return_response(result)
  134.         end
  135.     end
  136.        
  137. end
  138.  
  139. begin
  140.     if ARGV.size > 1
  141.         $url = ARGV[0]
  142.         PostRequester.start
  143.     else
  144.         PostRequester.show_help
  145.     end
  146. rescue => e
  147.     print "Error: #{e}\n"
  148. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement