2009-07-14 10 views
16

Der Versuch, eine lokale Intranetsite zu spiegeln und frühere Fragen mithilfe von 'wget' gefunden zu haben. Es funktioniert hervorragend mit Websites, die anonym sind, aber ich konnte es nicht für eine Website verwenden, die Benutzername \ Kennwort erwartet (IIS mit integrierter Windows-Authentifizierung). HierVerwenden von wget gegen geschützte Site mit NTLM

ist, was ich passieren in:

wget -c --http-user = 'Domain \ user' --http-Passwort PWD = http://local/site -dv

Hier die ist Debug-Ausgabe (man beachte ich einige mit Dummy-Werten offensichtlich ersetzt):

 
Setting --verbose (verbose) to 1 
DEBUG output created by Wget 1.11.4 on Windows-MSVC. 

--2009-07-14 09:39:04-- http://local/site 
Host `local' has not issued a general basic challenge. 
Resolving local... seconds 0.00, x.x.x.x 
Caching local => x.x.x.x 
Connecting to local|x.x.x.x|:80... seconds 0.00, connected. 
Created socket 1896. 
Releasing 0x003e32b0 (new refcount 1). 

---request begin--- 
GET /site/ HTTP/1.0 
User-Agent: Wget/1.11.4 
Accept: */* 
Host: local 
Connection: Keep-Alive 

---request end--- 
HTTP request sent, awaiting response... 
---response begin--- 
HTTP/1.1 401 Access Denied 
Server: Microsoft-IIS/5.1 
Date: Tue, 14 Jul 2009 13:39:04 GMT 
WWW-Authenticate: Negotiate 
WWW-Authenticate: NTLM 
Content-Length: 4431 
Content-Type: text/html 

---response end--- 
401 Access Denied 
Closed fd 1896 
Unknown authentication scheme. 
Authorization failed. 

Antwort

9

NTLM-Authentifizierung ist in wget 1.11 gebrochen, verwenden Sie stattdessen 1.10.

+4

Das Hinzufügen eines Links zum relevanten Fehlerticket wäre hier nützlich – Daenyth

+0

Noch nicht testen, ob es wahr ist. Aber ich bestätige anderes Verhalten in stdout im NTLM Fall. http://www.mail-archive.com/[email protected]/msg00003.html –

+0

Ich kann auch nicht bestätigen, dass das auch für mich funktioniert. 'wget --version' meldet 'GNU Wget 1.12 auf cygwin. + digest + ipv6 + nls + ntlm + opie + md5/openssl + https -gnutls + openssl + iri'. Aber in meinem Fall Server bietet 'WWW-Authenticate: Negotiate' nur (was ich glaube, ist entweder' NTLM' oder 'Kerberos' - ausgehandelt werden). –

7

Curl ist eigentlich wahrscheinlich ein besseres Tool zum Abrufen von Inhalten von NTLM-authentifizierten Webservern.

curl --anyauth --user username:password http://someserver/site 
+0

Locke arbeitete wie ein Charme, danke. – diogovk

+0

Die Verwendung von "--ntlm" anstelle von "--anyauth" hat für mich funktioniert. Ansonsten glaube ich, dass es die "Verhandlungs" -Authentifizierung gewählt hat, die fehlgeschlagen ist ("--ntlm --negotiate" ist ebenfalls fehlgeschlagen). –

0

Verwendung -–auth-no-challenge Option (wget 1.11+)

1

gefunden Lösung: Sie können durch die Verwendung einer äquivalenten Funktion für Ihre vorgeschlagenen wget Kommandozeile erhalten.
Es ist Workaround für Basic Auth IIS7.

Wenn Auth ist successeful es neben HTTP-Header senden:

'Authorization: <type> <credentials>'. 

So können wir Zulassung in Browser und Kopie dieser Header params aus Browser (Firebug Add-on) oder erzeugen tun:

$ echo -en 'username:password' | base64 
dXNlcm5hbWU6cGFzc3dvcmQK 
$ echo 'dXNlcm5hbWU6cGFzc3dvcmQK' | base64 -d 
username:password 

Beispiel:

$ wget --header="Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQK" http://example.com/