rest_api.pm 3.8 KB

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