2013-03-07 4 views
1

답변을 얻을 때 더 많은 질문이 게시 될 수 있습니다.LWP :: UserAgent를 사용하여 HTTP 헤더 값을 테스트하는 방법

현재 대학에서 SAT 점수 데이터가있는 파일을 자동으로 다운로드하는 데 사용되는 Perl 스크립트 문제를 해결하려고합니다.

아이디어는 특정 계정의 이메일을 통해 읽는 것입니다. (URL에서 사용되는) 사이클 번호를 꺼내십시오. 여러 개의 URL을 함께 묶어 라. 그런 다음 LWP::UserAgent을 사용하여 서버에서 파일을 가져 와서 다른 펄 매직을 수행하십시오.

내 조사에서 URL을 수동으로 입력하면 (실제로 스크립트가 사용자에 의해 실행되도록 제한되며주기 번호가 매번 교체 됨) 실제 작동하는 것으로 나타났습니다.

'_uri_canonical' => $VAR1->{'_request'}{'_uri'} 

을 성공할 요청에 존재하지만 : 전송 응답 객체를 검사에서

다시 나는 다음 줄에 실패 요청에서 누락되는 (우선) 나타났습니다.

실패한 요청에서이 행이 누락 된 이유를 알 수있는 사람이 있으면 감사의 말을 전합니다. 그러나 그것은 제가 묻는 것이 아닙니다.

제 질문은 거부 이유를 알아보기 위해 추가 조사에 관한 것입니다. LWP::UserAgent에 대한 문서에서

내가 이것을 발견 :

Error responses that LWP generates internally will have the "Client-Warning" header set to the value "Internal response". If you need to differentiate these internal responses from responses that a remote server actually generates, you need to test this header value.

내 질문 : 어떻게 실제로 헤더 값을 테스트합니까? (모든 무지를 용서, 나는 내 대학의 IT 부서에서 인턴 해요)

+0

내가 뭘 잘못 알고 있니? 나는 '_uri_canonical'=> $ VAR1 -> { '_ request'} { 'uri'}'가 헤더 필드가 아님을 확신합니다. 그것은 당신의 프로그램 내에서 무언가를 디버깅하기 위해'Data :: Dumper'의 출력과 같습니다. 나는 당신의 의도를 이해하고 당신을 위해 작동하지 않는 펄 코드를 더 많이 볼 필요가있다. – Borodin

+0

'_uri_canonical'이 없다는 것은 아무도 그 특별한 요청에 대해'uri_canonical' 메쏘드를 호출하지 않았다는 것을 의미합니다. 이것은 아마 실패한 요청에 어떤 일이 일어날 지와 관련이 있습니다. 작동하지 않는 스크립트가 그 전화를 걸거나,'HTTP :: Config' (누군가'$ ua-> add_handler'라고 말하기 때문에 발생합니다)와 같은 것일 수 있습니다. 더 많은 문맥없이 판단하기가 정말 어렵습니다. – darch

+0

설명 주셔서 감사합니다. 그것은 실제로 Data :: Dumper에서 출력됩니다.다음은 나를 적합하게 해주는 코드입니다 : 'code' foreach my $ msgnum (정렬 키 %주기) { my $ url = $ site. $ cycles {$ msgnum} {주기}; my $ response = $ browser-> get ($ url); my $ gpg = $ response-> content; 보고서 ($주기 {$ msgnum} {주기}, $ url, $ gpg, Dumper ($ 응답)); (그 형식이 잘못되면 사과드립니다.) 위에서 언급 한 uri_canonical 비트는 Report() sr에 전달 된 마지막 매개 변수에서 비롯됩니다. $ 브라우저는 기본 LWP :: UserAgent입니다. – lionchase11

답변

2

그것은 실제로 당신이로 얻을 수있는 헤더의 메시지의 다양한 배치하는 것은 다음과

if (my $cw = $response->header('Client-Warning')) { 
    die("Internal error: $cw\n"); 
} 

Internal response 메시지가 아니라 상태가 이미 오류를 나타낼 때 사용됩니다. 다른 메시지는 Redirect loop detectedMissing Authenticate header과 같은 다른 시간에 사용됩니다. 위의 코드는 단지 Internal response을 검사하는 것보다 메시지가있는 곳이면 무엇이든 얻을 수 있습니다.

+0

당신의 생각을 설명해주십시오. 응답에 여러 개의 메시지를 포함 할 수있는'Client-Warning' 헤더가 있다는 말입니까? 그것은 그 질문과 어떤 관련이 있습니까? – Borodin

+0

답변에서 명확히하고 수정했습니다. – ikegami

+0

이것을 사용하여 $ cw = "Internal response"를 산출했습니다. 생각? – lionchase11

1

LWP을 사용하는 표준 방법입니다

use strict; 
use warnings; 

use LWP; 

my $ua = LWP::UserAgent->new; 

my $resp = $ua->get('http://my.domain.co.uk/'); 

die $resp->status_line unless $resp->is_success; 

my $content = $resp->decoded_content; 

당신이 알아야 할 뭔가?

관련 문제