131 lines
1.5 KiB
Markdown
131 lines
1.5 KiB
Markdown
# Http Client
|
|
|
|
```perl
|
|
#!/usr/bin/perl
|
|
use warnings;
|
|
use strict;
|
|
|
|
use URI::URL;
|
|
use HTTP::Headers;
|
|
use HTTP::Request;
|
|
use LWP::UserAgent;
|
|
|
|
my $url = new URI::URL('https://www.example.com');
|
|
my $headers = new HTTP::Headers(
|
|
'Accept' => 'text/html',
|
|
'User-Agent' => 'Elex/1.0'
|
|
);
|
|
my $request = new HTTP::Request('GET', $url, $headers);
|
|
my $user_agent = new LWP::UserAgent;
|
|
|
|
my $response = $user_agent->request($request);
|
|
if ($response->is_success) {
|
|
print $response->content;
|
|
} else {
|
|
print $response->message;
|
|
}
|
|
```
|
|
|
|
## LWP::UserAgent
|
|
|
|
```perl
|
|
my $user_agent = new LWP::UserAgent;
|
|
```
|
|
|
|
- request
|
|
|
|
- credentials
|
|
|
|
- get_basic_credentials
|
|
|
|
- timeout
|
|
|
|
|
|
## HTTP::Request
|
|
|
|
```perl
|
|
my $request = new HTTP::Request($method, $url, $headers, $content);
|
|
```
|
|
|
|
- method : GET, POST 등
|
|
|
|
- url : 문자열 또는 `URI::URL` 객체
|
|
|
|
- headers : `HTTP::Headers` 객체
|
|
|
|
- content : 요청 바디
|
|
|
|
|
|
## HTTP::Response
|
|
|
|
```perl
|
|
my $response = $user_agent->request($request);
|
|
```
|
|
|
|
서버 측에서 응답을 생성하려는 경우에는
|
|
|
|
```perl
|
|
my $response = HTTP::Response->new($status_code, $msg, $header, $content);
|
|
```
|
|
|
|
- code
|
|
|
|
- message
|
|
|
|
- is_success
|
|
|
|
|
|
## HTTP::Headers
|
|
|
|
```perl
|
|
my $headers = new HTTP::Headers(
|
|
'name' => 'value', ...
|
|
);
|
|
```
|
|
|
|
- push_header
|
|
|
|
- remove_header
|
|
|
|
|
|
## HTTP::Status
|
|
|
|
- is_info
|
|
|
|
- is_success
|
|
|
|
- is_redirect
|
|
|
|
- is_client_error
|
|
|
|
- is_server_error
|
|
|
|
- is_error
|
|
|
|
|
|
## URI::URL
|
|
|
|
```perl
|
|
my $url = new URI::URL($url);
|
|
```
|
|
|
|
- scheme
|
|
|
|
- host
|
|
|
|
- port
|
|
|
|
- path
|
|
|
|
- query
|
|
|
|
- user
|
|
|
|
- password
|
|
|
|
|
|
## URI::Escape
|
|
|
|
- uri_escape
|
|
|
|
- uri_unescape |