rest_api.pm 3.7 KB

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