펄링과 컬링
6094 단어 programmingperl
그러나 그 도구는 curl 프로젝트의 진정한 금인 libcurl API에 대한 인터페이스일 뿐입니다. 이 API를 사용하면 모든 종류의 언어로 된 응용 프로그램에서 libcurl이 제공하는 놀라운 기능에 쉽게 액세스할 수 있습니다. 이 기사에서는 Perl에서 이 기능을 사용하는 방법에 대해 설명합니다.
빠른 예
use Net::Curl::Easier;
my $easy = Net::Curl::Easier->new(
url => 'http://perl.org',
followlocation => 1,
)->perform();
print $easy->head(), $easy->body();
방금 일어난 일에 대해 이야기합시다.
Net::Curl::Easier은 Net::Curl 의 "쉬운"인터페이스“easy” is what libcurl calls it! 주위의 얇은 래퍼로 Net::Curl의 거친 가장자리를 부드럽게 합니다.
(전체 공개: 나는 Net::Curl::Easier의 메인테이너입니다.)
적절한 URL을 제공하고 HTTP 리디렉션을 따르도록 지시한 "Easer"객체를 생성하면( followlocation
는 HTTP’s Location
header을 나타냄), Easer 객체에서 perform()
를 실행합니다.
그런 다음 HTTP 응답 헤더와 본문을 인쇄하면 완료됩니다!
HTTP::Tiny를 사용하지 않는 이유는 무엇입니까?
물론. 글쎄요, 오류 보고입니다. 고려하다:
Net::Curl::Easier->new(
url => 'http://blahblah',
)->perform();
이것을 실행하면 표준 오류로 인쇄된 Couldn't resolve host name
를 볼 수 있습니다. 그러나 더 깊이 파고 들면 다음과 같은 멋진 것을 볼 수 있습니다.
use Net::Curl::Easier;
use Data::Dumper;
eval {
Net::Curl::Easier->new(
url => 'http://blahblah',
)->perform();
};
print Dumper $@;
그 오류는 단순한 문자열이 아닙니다. 예외 객체입니다.
대규모 시스템에서는 특정 오류 유형을 다른 유형과 다르게 처리하고 싶은 경우가 많습니다. HTTP::Tiny의 오류는 문자열일 뿐이므로 HTTP::Tiny를 사용한 유형별 오류 처리에는 취약한 구문 분석 문자열이 수반됩니다. 누군가가 명확성을 위해 일부 오류 메시지의 단어를 변경하여 내 문자열 파서를 중단하면 어떻게 될까요?
Net::Curl을 사용하면 the curl project itself maintains 에 대한 문서인 특정 숫자 오류 코드를 찾을 수 있습니다. 이것은 훨씬 더 강력합니다.
신경쓰지마. 또 뭘 얻었어?
확인. 이건 어때:
my $easy = Net::Curl::Easier->new(
username => 'hal',
userpwd => 'itsasecret',
url => 'imap://mail.example.com/INBOX/;UID=123',
)->perform();
방금 문의 ... 이메일받은 편지함?!?
Curl은 HTTP만 사용하는 것이 아닙니다. IMAP, LDAP, SCP 및 MQTT를 포함한 다른 많은 프로토콜을 사용합니다. curl이 지원하는 전체 프로토콜 목록을 보려면 curl --version
를 실행하십시오.
동시성
Curl은 동시 쿼리를 실행할 수도 있습니다. 그렇게 하려면 Net::Curl::Promiser 을 사용하는 것이 좋습니다. (전체 공개: 이 모듈도 유지 관리합니다.)
예를 들어 Mojolicious을 사용한다고 가정합니다.
use Net::Curl::Easier;
use Net::Curl::Promiser::Mojo;
use Mojo::Promise;
my $easy1 = Net::Curl::Easier->new(
url => 'http://perl.org',
followlocation => 1,
);
my $easy2 = Net::Curl::Easier->new(
username => 'hal',
userpwd => 'itsasecret',
url => 'imap://mail.example.com/INBOX/;UID=123',
);
my $easy3 = Net::Curl::Easier->new(
username => 'hal',
userpwd => 'itsasecret',
url => 'scp://tty.example.com/path/to/file',
);
my $promiser = Net::Curl::Promiser::Mojo->new();
Mojo::Promise->all_settled(
$promiser->add_handle($easy1)->then( sub {
print $easy1->head(), $easy1->body();
} ),
$promiser->add_handle($easy2)->then( sub {
# ... whatever you want with the IMAP result
} ),
$promiser->add_handle($easy3)->then( sub {
# ... whatever you want with the SCP result
} ),
)->wait();
우리는 웹 페이지를 잡고, 편지함을 조회하고, SCP를 통해 파일을 다운로드했습니다. 이 모든 것을 동시에!
또한 이 메서드는 다른 Promise와 원활하게 연결됩니다. 따라서 기존Mojo::UserAgent 기반 코드가 있는 경우 다른 프로토콜에 대한 요청을 함께 추가할 수 있습니다.
Net::Curl::Promizer는 기본적으로 다음과 함께 작동합니다.
AnyEvent 및
IO::Async , 그것들이 당신에게 더 큰 관심이 있다면. 또한 사용자 지정select 기반 이벤트 루프를 위한 편의 레이어를 제공합니다.
기타 모듈
위에 제시된 모듈에 대한 몇 가지 대안:
use Net::Curl::Easier;
my $easy = Net::Curl::Easier->new(
url => 'http://perl.org',
followlocation => 1,
)->perform();
print $easy->head(), $easy->body();
물론. 글쎄요, 오류 보고입니다. 고려하다:
Net::Curl::Easier->new(
url => 'http://blahblah',
)->perform();
이것을 실행하면 표준 오류로 인쇄된
Couldn't resolve host name
를 볼 수 있습니다. 그러나 더 깊이 파고 들면 다음과 같은 멋진 것을 볼 수 있습니다.use Net::Curl::Easier;
use Data::Dumper;
eval {
Net::Curl::Easier->new(
url => 'http://blahblah',
)->perform();
};
print Dumper $@;
그 오류는 단순한 문자열이 아닙니다. 예외 객체입니다.
대규모 시스템에서는 특정 오류 유형을 다른 유형과 다르게 처리하고 싶은 경우가 많습니다. HTTP::Tiny의 오류는 문자열일 뿐이므로 HTTP::Tiny를 사용한 유형별 오류 처리에는 취약한 구문 분석 문자열이 수반됩니다. 누군가가 명확성을 위해 일부 오류 메시지의 단어를 변경하여 내 문자열 파서를 중단하면 어떻게 될까요?
Net::Curl을 사용하면 the curl project itself maintains 에 대한 문서인 특정 숫자 오류 코드를 찾을 수 있습니다. 이것은 훨씬 더 강력합니다.
신경쓰지마. 또 뭘 얻었어?
확인. 이건 어때:
my $easy = Net::Curl::Easier->new(
username => 'hal',
userpwd => 'itsasecret',
url => 'imap://mail.example.com/INBOX/;UID=123',
)->perform();
방금 문의 ... 이메일받은 편지함?!?
Curl은 HTTP만 사용하는 것이 아닙니다. IMAP, LDAP, SCP 및 MQTT를 포함한 다른 많은 프로토콜을 사용합니다. curl이 지원하는 전체 프로토콜 목록을 보려면 curl --version
를 실행하십시오.
동시성
Curl은 동시 쿼리를 실행할 수도 있습니다. 그렇게 하려면 Net::Curl::Promiser 을 사용하는 것이 좋습니다. (전체 공개: 이 모듈도 유지 관리합니다.)
예를 들어 Mojolicious을 사용한다고 가정합니다.
use Net::Curl::Easier;
use Net::Curl::Promiser::Mojo;
use Mojo::Promise;
my $easy1 = Net::Curl::Easier->new(
url => 'http://perl.org',
followlocation => 1,
);
my $easy2 = Net::Curl::Easier->new(
username => 'hal',
userpwd => 'itsasecret',
url => 'imap://mail.example.com/INBOX/;UID=123',
);
my $easy3 = Net::Curl::Easier->new(
username => 'hal',
userpwd => 'itsasecret',
url => 'scp://tty.example.com/path/to/file',
);
my $promiser = Net::Curl::Promiser::Mojo->new();
Mojo::Promise->all_settled(
$promiser->add_handle($easy1)->then( sub {
print $easy1->head(), $easy1->body();
} ),
$promiser->add_handle($easy2)->then( sub {
# ... whatever you want with the IMAP result
} ),
$promiser->add_handle($easy3)->then( sub {
# ... whatever you want with the SCP result
} ),
)->wait();
우리는 웹 페이지를 잡고, 편지함을 조회하고, SCP를 통해 파일을 다운로드했습니다. 이 모든 것을 동시에!
또한 이 메서드는 다른 Promise와 원활하게 연결됩니다. 따라서 기존Mojo::UserAgent 기반 코드가 있는 경우 다른 프로토콜에 대한 요청을 함께 추가할 수 있습니다.
Net::Curl::Promizer는 기본적으로 다음과 함께 작동합니다.
AnyEvent 및
IO::Async , 그것들이 당신에게 더 큰 관심이 있다면. 또한 사용자 지정select 기반 이벤트 루프를 위한 편의 레이어를 제공합니다.
기타 모듈
위에 제시된 모듈에 대한 몇 가지 대안:
my $easy = Net::Curl::Easier->new(
username => 'hal',
userpwd => 'itsasecret',
url => 'imap://mail.example.com/INBOX/;UID=123',
)->perform();
Curl은 동시 쿼리를 실행할 수도 있습니다. 그렇게 하려면 Net::Curl::Promiser 을 사용하는 것이 좋습니다. (전체 공개: 이 모듈도 유지 관리합니다.)
예를 들어 Mojolicious을 사용한다고 가정합니다.
use Net::Curl::Easier;
use Net::Curl::Promiser::Mojo;
use Mojo::Promise;
my $easy1 = Net::Curl::Easier->new(
url => 'http://perl.org',
followlocation => 1,
);
my $easy2 = Net::Curl::Easier->new(
username => 'hal',
userpwd => 'itsasecret',
url => 'imap://mail.example.com/INBOX/;UID=123',
);
my $easy3 = Net::Curl::Easier->new(
username => 'hal',
userpwd => 'itsasecret',
url => 'scp://tty.example.com/path/to/file',
);
my $promiser = Net::Curl::Promiser::Mojo->new();
Mojo::Promise->all_settled(
$promiser->add_handle($easy1)->then( sub {
print $easy1->head(), $easy1->body();
} ),
$promiser->add_handle($easy2)->then( sub {
# ... whatever you want with the IMAP result
} ),
$promiser->add_handle($easy3)->then( sub {
# ... whatever you want with the SCP result
} ),
)->wait();
우리는 웹 페이지를 잡고, 편지함을 조회하고, SCP를 통해 파일을 다운로드했습니다. 이 모든 것을 동시에!
또한 이 메서드는 다른 Promise와 원활하게 연결됩니다. 따라서 기존Mojo::UserAgent 기반 코드가 있는 경우 다른 프로토콜에 대한 요청을 함께 추가할 수 있습니다.
Net::Curl::Promizer는 기본적으로 다음과 함께 작동합니다.
AnyEvent 및
IO::Async , 그것들이 당신에게 더 큰 관심이 있다면. 또한 사용자 지정select 기반 이벤트 루프를 위한 편의 레이어를 제공합니다.
기타 모듈
위에 제시된 모듈에 대한 몇 가지 대안:
마무리 생각
Curl은 위의 예에서 표면을 긁어낸 놀라운 기능을 제공합니다. 확인 해봐!
Reference
이 문제에 관하여(펄링과 컬링), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/fgasper/perling-and-curling-2i10
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(펄링과 컬링), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/fgasper/perling-and-curling-2i10텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)