2010-01-11 2 views
4

WGET을 사용하여 인증 요구 URL에서 일부 XML 데이터를 가져 오는 스크립트를 사용하고 있습니다. 그렇게함으로써왜 WGET은 성공하기 전에 2 개의 오류 메시지를 반환합니까?

, 내 스크립트에 액세스 각 URL에 대한 다음과 같은 출력을 생성 (IPS와 호스트 이름은 유죄를 보호하기 위해 변경) :

> Resolving host.name.com... 127.0.0.1 
> Connecting to host.name.com|127.0.0.1|:80... connected. 
> HTTP request sent, awaiting response... 401 Access denied 
> Connecting to host.name.com|127.0.0.1|:80... connected. 
> HTTP request sent, awaiting response... 401 Unauthorized 
> Reusing existing connection to host.name.com:80. 
> HTTP request sent, awaiting response... 200 OK 

왜 WGET는 URL에 액세스하는 것은 두 번에 연결하기 전에 성공적으로 실패 불평합니까? 종료하거나 처음 시도에서 제대로 연결되도록하는 방법이 있습니까?

wget --http-user=USERNAME --password=PASSWORD -O file.xml http://host.name.com/file.xml 
+1

인증 방법이 둘 이상일 수 있습니다. 방법 1과 2가 실패하면 세 번째 시도가 성공합니까? – lexu

+0

@lexu - 가능성은 있지만 서버가 사용하는 방법을 어떻게 결정할 수 있습니까? 먼저 WGET을 사용하도록 지정하려면 어떻게해야합니까? – Dinedal

+0

wget에 -d 스위치를 지정하면 모든 요청과 응답의 전체 텍스트가 표시됩니다. –

답변

4

이 설계된 것으로 나타납니다

는 참고로, 여기에 내가 WGET 전화를 사용하고있는 라인입니다. @Wayne Conrad의 조언에 따라 -d 스위치를 추가하여 NTLM이 필요했기 때문에 첫 번째 시도가 실패하고 두 번째 시도가 실패한 것을 관찰 할 수있었습니다. 첫 번째 NTLM 시도는 수준 1 이었기 때문에 수준 3 NTLM 시도 - 응답이 필요했습니다. WGET은 마지막으로 세 번째 시도에서 필요한 인증을 제공합니다.

WGET은 세션 기간 동안 재 인증을 방지하기 위해 쿠키를 얻습니다. 이는 쿠키가 연결되지 않은 경우이를 방지합니다. 이 작업을 수행하려면 WGET에 파일 목록을 전달해야하지만, 파일 이름을 미리 알지 못하기 때문에 읽을 수 없습니다.

2

새 버전의 wget이있는 것 같습니다. 1.10.2 이후, wget은 서버가 먼저 문제를 제기하지 않는 한 인증을 발송하지 않습니다. 그리고 그것이 첫 번째 것이 실패하는 이유입니다. 두 번째는 당신이 묘사 한 것의 실패 원인입니다.

매개 변수 중 하나를 줄이려면 --auth-no-challenge 매개 변수를 추가하십시오. 이것은 "기본"에서 첫 번째를 보내고 실패하면 두 번째는 "다이제스트"모드로 전송됩니다. 어느 것이 효과가있다.

관련 문제