/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
htaccess og InputStream ... ?
Fra : Simon...


Dato : 01-01-03 23:45

Hej,

jeg skal åbne en side på et site der er htaccess beskyttet, normalt i en
browser kan man bare skrive som sådan:

http://login:pass@side.dk

men jeg har prøvet:

url = new URL("http://login:pass@side.dk");
is = url.openStream();

og så kommer den med en fejl der ser sådan her ud:

java.io.IOException: Server returned HTTP response code: 401 for URL:
http://login:pass@side.dk
at
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection
..java:709)
at java.net.URL.openStream(URL.java:960)
at HegreMain.main(HegreMain.java:268)
Exception in thread "main"


hvad gør man så ?

mange tak og godt nytår !
mvh.Simon



 
 
Jonas Kongslund (02-01-2003)
Kommentar
Fra : Jonas Kongslund


Dato : 02-01-03 02:06

Simon... wrote:

> Hej,
>
> jeg skal åbne en side på et site der er htaccess beskyttet, normalt i en
> browser kan man bare skrive som sådan:
>
> http://login:pass@side.dk
>
> men jeg har prøvet:
>
> url = new URL("http://login:pass@side.dk");
> is = url.openStream();
>
> og så kommer den med en fejl der ser sådan her ud:
>
> java.io.IOException: Server returned HTTP response code: 401 for URL:
> http://login:pass@side.dk
> at
>
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection
> .java:709)
> at java.net.URL.openStream(URL.java:960)
> at HegreMain.main(HegreMain.java:268)
> Exception in thread "main"
>
>
> hvad gør man så ?

Jævnfør sektion 3.3 i RFC 1738[1] så er brugernavn og adgangskode ikke en
del af HTTP URL skemaet. Umiddelbart tror jeg derfor at du bliver nødt til
selv at udføre autentificeringsprotokollen.

Er der tale om Basic Authentication skemaet beskrevet i sektion 2 i RFC
2617[2] så kan man gøre noget i stil med nedenstående:

URL url = new URL("http://side.dk/");
HttpURLConnection urlCon =
(HttpURLConnection) url.openConnection();
String userAndPassword =
new sun.misc.BASE64Encoder().encode("brugernavn:adgangskode".getBytes());
urlCon.setRequestProperty("Authorization",
"Basic "+userAndPassword);
urlCon.connect();

BufferedReader reader =
new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
String ss = reader.readLine();
while (ss != null) {
System.out.println(ss);
ss = reader.readLine();
}

Er der tale om Digest Access Authentication skemaet beskrevet i sektion 3 i
RFC 2617[2] så er det lidt mere besværligt. Du vil få brug for
java.security.MessageDigest til at lave en MD5 checksum.

Du finder ud af hvilket skema der er tale om ved at aflæse WWW-Authenticate
headeren som serveren returner i forbindelse med en fejl 401. Se sektion
1.2 i RFC 2617[2] for mere information vedrørende dette.

Apache 1.3 og 2.0 understøtter kun Basic Authentication og Digest Access
Authentication så der er ikke andre skemaer du skal tage højde for[3][4].

[1] RFC 1738: Uniform Resource Locators (URL)
http://www.w3.org/Addressing/rfc1738.txt

[2] RFC 2617: HTTP Authentication: Basic and Digest Access Authentication
http://www.ietf.org/rfc/rfc2617.txt

[3] Apache HTTP Server Version 1.3: Apache Core Features
http://httpd.apache.org/docs/mod/core.html#authtype

[4] Apache HTTP Server Version 2.0: Apache Core Features
http://httpd.apache.org/docs-2.0/mod/core.html#authtype

--
Jonas Kongslund <jonas(at)kongslund.dk> http://www.kongslund.dk/
The programmer, like the poet, works only slightly removed from pure
thought-stuff. He builds his castles in the air, from air, creating by
exertion of the imagination. [Brooks, The Mythical Man-Month]

Finn Nielsen (02-01-2003)
Kommentar
Fra : Finn Nielsen


Dato : 02-01-03 09:27

Jonas Kongslund <gamma@post.tele.dk> writes:

> Jævnfør sektion 3.3 i RFC 1738[1] så er brugernavn og adgangskode ikke en
> del af HTTP URL skemaet. Umiddelbart tror jeg derfor at du bliver nødt til
> selv at udføre autentificeringsprotokollen.

Eller hvis man ikke er bange for jakartas alpha kode (som ikke er helt
ringe), kan man bruge HttpClient
(http://jakarta.apache.org/commons/httpclient/) istedet for
java.net.URLConnection.

--
Finn Nielsen - http://www.finnnielsen.dk/

Jonas Kongslund (02-01-2003)
Kommentar
Fra : Jonas Kongslund


Dato : 02-01-03 09:54

Finn Nielsen wrote:

> Eller hvis man ikke er bange for jakartas alpha kode (som ikke er helt
> ringe), kan man bruge HttpClient
> (http://jakarta.apache.org/commons/httpclient/) istedet for
> java.net.URLConnection.
>

Umiddelbart ser det ud til at HttpClient kun understøtter Basic
Authentication.

<URL:http://jakarta.apache.org/commons/httpclient/features.html>

--
Jonas Kongslund <jonas(at)kongslund.dk> http://www.kongslund.dk/
The programmer, like the poet, works only slightly removed from pure
thought-stuff. He builds his castles in the air, from air, creating by
exertion of the imagination. [Brooks, The Mythical Man-Month]

Finn Nielsen (02-01-2003)
Kommentar
Fra : Finn Nielsen


Dato : 02-01-03 10:33

Jonas Kongslund <gamma@post.tele.dk> writes:

> Finn Nielsen wrote:
>
>> Eller hvis man ikke er bange for jakartas alpha kode (som ikke er helt
>> ringe), kan man bruge HttpClient
>> (http://jakarta.apache.org/commons/httpclient/) istedet for
>> java.net.URLConnection.
>>
>
> Umiddelbart ser det ud til at HttpClient kun understøtter Basic
> Authentication.

Ja, det har du ret i. Men det er vel egentlig også den mest almindelige
når man bruger .htaccess til at beskytte siderne med..

--
Finn Nielsen - http://www.finnnielsen.dk/

Simon... (02-01-2003)
Kommentar
Fra : Simon...


Dato : 02-01-03 11:35

tak det vil jeg lige kigge på, må indrømme jeg troede det umiddelbart ville
være lettere. Til gengæld var der også noget om cookies på den side der, så
det er noget jeg absolut skal læse alligevel :)

tak!
mvh.Simon



Jonas Kongslund (02-01-2003)
Kommentar
Fra : Jonas Kongslund


Dato : 02-01-03 12:00

Simon... wrote:

> tak det vil jeg lige kigge på, må indrømme jeg troede det umiddelbart
> ville være lettere. Til gengæld var der også noget om cookies på den side
> der, så det er noget jeg absolut skal læse alligevel :)

Hvis du har mulighed for at anvende HTTP servlets i stedet for
HttpURLConnections til det du er i gang med, så vil jeg anbefale dig at
bruge javax.servlet.http.HttpSession til sessionshåndtering frem for
direkte at arbejde med cookies. Dermed slipper du for at bekymre dig om
hvorvidt klienten forstår cookies eller ej. I tilfælde af at klienten ikke
forstår cookies, så benytter HttpSession sig af andre metoder såsom URL
rewriting.

Hvis du ikke har mulighed for at anvende HTTP servlets så kan det alligevel
være fordelagtigt at tage et kig nærmere på HttpSessions interface for at
få inspiration til hvordan et sessionshåndteringsinterface bør se ud. Se
<URL:http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpSession.html>.

--
Jonas Kongslund <jonas(at)kongslund.dk> http://www.kongslund.dk/
The programmer, like the poet, works only slightly removed from pure
thought-stuff. He builds his castles in the air, from air, creating by
exertion of the imagination. [Brooks, The Mythical Man-Month]

Finn Nielsen (02-01-2003)
Kommentar
Fra : Finn Nielsen


Dato : 02-01-03 17:47

Jonas Kongslund <gamma@post.tele.dk> writes:

> Simon... wrote:
>
>> tak det vil jeg lige kigge på, må indrømme jeg troede det umiddelbart
>> ville være lettere. Til gengæld var der også noget om cookies på den side
>> der, så det er noget jeg absolut skal læse alligevel :)
>
> Hvis du har mulighed for at anvende HTTP servlets i stedet for
> HttpURLConnections til det du er i gang med, så vil jeg anbefale dig at
> bruge javax.servlet.http.HttpSession til sessionshåndtering frem for
> direkte at arbejde med cookies.

Blander du ikke ting sammen nu? HttpURLConnections bruges til at lave
forbindelser til andre steder (man er selv klienten), Servlets bruges til
at lave ting på serversiden (andre er klienterne).

--
Finn Nielsen - http://www.finnnielsen.dk/

Jonas Kongslund (02-01-2003)
Kommentar
Fra : Jonas Kongslund


Dato : 02-01-03 18:53

Finn Nielsen wrote:

> Blander du ikke ting sammen nu?

Jo, det var en tanketorsk.

--
Jonas Kongslund <jonas(at)kongslund.dk> http://www.kongslund.dk/
The programmer, like the poet, works only slightly removed from pure
thought-stuff. He builds his castles in the air, from air, creating by
exertion of the imagination. [Brooks, The Mythical Man-Month]

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste