rest_api.pm 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. package eyelib::rest_api;
  2. #
  3. # Copyright (C) Roman Dmitriev, rnd@rajven.ru
  4. #
  5. use utf8;
  6. use open ":encoding(utf8)";
  7. use strict;
  8. use English;
  9. use FindBin qw($Bin);
  10. use lib "/opt/Eye/scripts";
  11. use base 'Exporter';
  12. use vars qw(@EXPORT @ISA);
  13. use HTTP::Request::Common;
  14. use HTTP::Request;
  15. use LWP;
  16. use URI::Encode;
  17. use eyelib::main;
  18. use eyelib::logconfig;
  19. use Data::Dumper;
  20. use IO::Socket::SSL;
  21. use JSON;
  22. #libwww-perl
  23. #libhttp-message-perl
  24. #libhttp-request-params-perl
  25. #liburi-encode-perl
  26. #libjson-perl
  27. our @ISA = qw(Exporter);
  28. our @EXPORT = qw(
  29. rest_get_request
  30. rest_patch_request
  31. rest_put_request
  32. rest_delete_request
  33. );
  34. BEGIN
  35. {
  36. #search data
  37. sub rest_get_request {
  38. my $uri = shift;
  39. my $login = shift;
  40. my $pass = shift;
  41. #disable check cert
  42. my $ua = LWP::UserAgent->new(protocols_allowed => ['http', 'https'], ssl_opts=> { SSL_verify_mode => SSL_VERIFY_NONE(), verify_hostname =>0 } );
  43. #get request
  44. my $req = HTTP::Request->new('GET', $uri);
  45. #basic authorize
  46. $req->authorization_basic($login,$pass);
  47. #send request
  48. log_info("Send request: ".$uri);
  49. my $resp = $ua->request($req);
  50. my $ret = $resp->is_success;
  51. if ($ret) {
  52. my $result = decode_json($resp->decoded_content);
  53. log_debug("Received reply: ".Dumper($result));
  54. return $result;
  55. } else {
  56. log_error("HTTP GET error code: ".$resp->code);
  57. log_error("HTTP GET error message: ".$resp->message);
  58. return;
  59. }
  60. }
  61. #change data
  62. sub rest_patch_request {
  63. my $uri = shift;
  64. my $data = shift;
  65. my $login = shift;
  66. my $pass = shift;
  67. #disable check cert
  68. my $ua = LWP::UserAgent->new(protocols_allowed => ['http', 'https'], ssl_opts=> { SSL_verify_mode => SSL_VERIFY_NONE(), verify_hostname =>0 } );
  69. #header
  70. my $hr = [ 'Content-Type' => 'application/json' ];
  71. #encode
  72. my $encoded_data = encode_json($data);
  73. #patch request
  74. my $req = HTTP::Request->new('PATCH','$uri', $hr, $encoded_data);
  75. #basic authorize
  76. $req->authorization_basic($login,$pass);
  77. #run patch
  78. my $resp = $ua->request($req,$uri);
  79. my $ret = $resp->is_success;
  80. if ($ret) {
  81. my $result = decode_json($resp->decoded_content);
  82. log_debug("Received reply: ".Dumper($result));
  83. return $result;
  84. } else {
  85. log_error("HTTP PATCH error code: ".$resp->code);
  86. log_error("HTTP PATCH error message: ".$resp->message);
  87. return;
  88. }
  89. }
  90. #add new data
  91. sub rest_put_request {
  92. my $uri = shift;
  93. my $data = shift;
  94. my $login = shift;
  95. my $pass = shift;
  96. #disable check cert
  97. my $ua = LWP::UserAgent->new(protocols_allowed => ['http', 'https'], ssl_opts=> { SSL_verify_mode => SSL_VERIFY_NONE(), verify_hostname =>0 } );
  98. #header
  99. my $hr = [ 'Content-Type' => 'application/json' ];
  100. #encode
  101. my $encoded_data = encode_json($data);
  102. #patch request
  103. my $req = HTTP::Request->new('PUT','$uri', $hr, $encoded_data);
  104. #basic authorize
  105. $req->authorization_basic($login,$pass);
  106. #put
  107. my $resp = $ua->request($req,$uri);
  108. my $ret = $resp->is_success;
  109. if ($ret) {
  110. my $result = decode_json($resp->decoded_content);
  111. log_debug("Received reply: ".Dumper($result));
  112. return $result;
  113. } else {
  114. log_error("HTTP PUT error code: ".$resp->code);
  115. log_error("HTTP PUT error message: ".$resp->message);
  116. return;
  117. }
  118. }
  119. #delete data
  120. sub rest_delete_request {
  121. my $uri = shift;
  122. my $login = shift;
  123. my $pass = shift;
  124. #disable check cert
  125. my $ua = LWP::UserAgent->new(protocols_allowed => ['http', 'https'], ssl_opts=> { SSL_verify_mode => SSL_VERIFY_NONE(), verify_hostname =>0 } );
  126. #delete request
  127. my $req = HTTP::Request->new('DELETE','$uri');
  128. #basic authorize
  129. $req->authorization_basic($login,$pass);
  130. #delete
  131. my $resp = $ua->request($req,$uri);
  132. my $ret = $resp->is_success;
  133. if ($ret) {
  134. my $result = decode_json($resp->decoded_content);
  135. log_debug("Received reply: ".Dumper($result));
  136. return $result;
  137. } else {
  138. log_error("HTTP DELETE error code: ".$resp->code);
  139. log_error("HTTP DELETE error message: ".$resp->message);
  140. return;
  141. }
  142. }
  143. 1;
  144. }