Avatar billede nielsbrinch Nybegynder
21. februar 2002 - 12:37 Der er 8 kommentarer og
1 løsning

FileNotFoundException ved URL i BufferedReader

URL url = new URL("http://images.google.com/images?q=test");
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));

Dette giver FileNotFoundException ved BufferedReader - jeg ved det fungerer med andre url's - og jeg ved at url'en findes, for den kan bruges i en browser.

Hvordan får jeg den til at virke i mit java-program? 

    java.io.FileNotFoundException: http://images.google.com/images?q=test
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:549)
    at imagescout.Frame.parseList(Frame.java:190)
    at imagescout.Frame.jButton1_actionPerformed(Frame.java:174)
    at imagescout.Frame$1.actionPerformed(Frame.java:75)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1450)
    at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1504)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:378)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:250)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:216)
    at java.awt.Component.processMouseEvent(Component.java:3717)
    at java.awt.Component.processEvent(Component.java:3546)
    at java.awt.Container.processEvent(Container.java:1167)
    at java.awt.Component.dispatchEventImpl(Component.java:2595)
    at java.awt.Container.dispatchEventImpl(Container.java:1216)
    at java.awt.Component.dispatchEvent(Component.java:2499)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:2458)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:2223)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2132)
    at java.awt.Container.dispatchEventImpl(Container.java:1203)
    at java.awt.Window.dispatchEventImpl(Window.java:918)
    at java.awt.Component.dispatchEvent(Component.java:2499)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:336)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:134)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:96)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:88) 

Hvordan tvinger jeg mit java-program til at hente url'en?
Avatar billede carstenknudsen Nybegynder
21. februar 2002 - 12:57 #1
Det bliver svært.  Den melder tilbage med fejlkoden
HTTP_FORBIDDEN og den lyder jo ikke rar. Man
kan heller ikke få en error stream (getErrorStream)
så den er ikke så forfærdelig meddelsom.
Avatar billede nielsbrinch Nybegynder
21. februar 2002 - 14:06 #2
Man burde kunne - hvorfor skulle Internet Explorer have andre rettigheder end et hvilket som helst java-program? Det gælder vel bare om at sende de samme signaler som Internet Explorer sender.
Avatar billede carstenknudsen Nybegynder
21. februar 2002 - 15:20 #3
Du skal have overbevist google om at du er en browser,
du kan opnå det  ved at sende en header hvor du
sætter user_agent til f.eks. "Mozilla" så tror google
at du er en rigtig browser og så får du siden. Jeg
skal prøve at se hvordan det gøres men svaret i detaljer
kommer ikke lige den første times tid.
Avatar billede carstenknudsen Nybegynder
21. februar 2002 - 15:21 #4
Skulle vist være user-agent.
Avatar billede nielsbrinch Nybegynder
21. februar 2002 - 15:30 #5
Det lyder som det helt rigtige
Avatar billede nielsbrinch Nybegynder
21. februar 2002 - 20:19 #6
...så det glæder jeg mig til at se
Avatar billede carstenknudsen Nybegynder
21. februar 2002 - 21:10 #7
Følgende kode får data fra google, det
var tilsyneladende ikke nødvendigt at
"fake" at man er en browser. Du kan
smide output fra programmet i en fil
og inspicere det i en browser.

import java.io.*;
import java.net.*;

public class Server {
    public static void main( String[] args ) throws Exception {
    Socket socket = new Socket( "image.google.com", 80 );
    BufferedReader reader = new BufferedReader( new InputStreamReader( socket.getInputStream() ) );
    PrintWriter writer = new PrintWriter( socket.getOutputStream() );
    writer.print( "GET /images?q=test HTTP/1.0\n\n" );
    writer.flush();
    String line;
    while ( ( line = reader.readLine() ) != null ) {
        System.out.println( line );
    }
    reader.close();
    writer.close();
    }
}
Avatar billede carstenknudsen Nybegynder
21. februar 2002 - 21:11 #8
Man burde kalde socket.close() til sidst
for en god ordens skyld.
Avatar billede nielsbrinch Nybegynder
21. februar 2002 - 23:15 #9
Sejt! Tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester