Lettura pagina

di il
12 risposte

Lettura pagina

Salve, dovrei acquisire un dataset in formato json da un sito dove c'è un elenco di lavori in formato json. Ho 2 problemi: il primo è che per leggere i file da questo sito serve una chiave API; io da postman riesco ad inserirla e leggerla, ma quando vado a farlo in java, no. Qualcuno conosce la procedura/codice da fare? Secondo dubbio è proprio come fare a poter prelevare questo dataset per caricarlo e gestirlo poi mediante java. Grazie per la collaborazione

12 Risposte

  • Re: Lettura pagina

    LeoTheGamer ha scritto:


    il primo è che per leggere i file da questo sito serve una chiave API
    API key che presumo devi passare in header o forse in query param.

    LeoTheGamer ha scritto:


    ma quando vado a farlo in java, no.
    Devi precisare quali api stai usando per fare la request HTTP. Al livello basilare c'è la api di java.net, ovvero URL, URLConnection, ecc... Altrimenti ci sono varie api di terze parti.
    Se hai del codice già fatto, mostralo, altrimenti non saprei cosa dire di più ...
  • Re: Lettura pagina

    Import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.URL;

    public class Collegamento1 {
    public static void main(String[] args) throws Exception {
    URL url = new URL("https://findwork.dev/api/job");

    try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"))) {
    for (String line; (line = reader.readLine()) != null;) {
    System.out.println(line);
    }
    }

    }
    }
    Questo è il codice che ho scritto, ma se compilo con quel link mi da l'errore 401 che dice che non ho l'autorizzazione. Quindi mi chiedevo come faccio ad inserire l'api key ( di cui sono in possesso)
  • Re: Lettura pagina

    LeoTheGamer ha scritto:


    ma se compilo con quel link mi da l'errore 401 che dice che non ho l'autorizzazione.
    Come ho già detto prima, la API key si specifica tipicamente in header o eventualmente in query param. Questo devi saperlo tu, sapendo anche il name da usare (per l'header o il param). Su questo non posso aiutarti .. a meno di andare io a cercare documentazione di quel servizio a quel url.

    Se è in query param, lo aggiungi al url. Se in header, si setta con il setRequestProperty() di URLConnection.
    Ma nota che nel tuo codice non ottieni il URLConnection ma direttamente lo stream. Quindi in questo caso dovresti "spezzare": prima fai url.openConnection() per avere il URLConnection su cui usi setRequestProperty, poi getInputStream() per lo stream.

    Ma ripeto: devi chiarire prima COME devi passare la API key.
  • Re: Lettura pagina

    andbin ha scritto:


    LeoTheGamer ha scritto:


    ma se compilo con quel link mi da l'errore 401 che dice che non ho l'autorizzazione.
    Come ho già detto prima, la API key si specifica tipicamente in header o eventualmente in query param. Questo devi saperlo tu, sapendo anche il name da usare (per l'header o il param). Su questo non posso aiutarti .. a meno di andare io a cercare documentazione di quel servizio a quel url.

    Se è in query param, lo aggiungi al url. Se in header, si setta con il setRequestProperty() di URLConnection.
    Ma nota che nel tuo codice non ottieni il URLConnection ma direttamente lo stream. Quindi in questo caso dovresti "spezzare": prima fai url.openConnection() per avere il URLConnection su cui usi setRequestProperty, poi getInputStream() per lo stream.

    Ma ripeto: devi chiarire prima COME devi passare la API key.
    In entrambi i casi cosa/che codici dovrei scrivere? Perchè su internet ci ho capito ben poco...
    Poi in teoria non avrei alcun nome utente ma solo quell'api key. Se uso postman mi basta mettere nell header Authoriazion e Token (codice capi key) e mi visualizza il contenuto della pagina. Ma su java mi da l errore 401
    grazie
  • Re: Lettura pagina

    LeoTheGamer ha scritto:


    Poi in teoria non avrei alcun nome utente ma solo quell'api key.
    Non ho parlato di nome utente ....

    LeoTheGamer ha scritto:


    Se uso postman mi basta mettere nell header Authoriazion e Token (codice capi key)
    Gli header, l'ho già detto prima, si impostano sul URLConnection con il metodo setRequestProperty().
    URLConnection urlConn = url.openConnection();
    urlConn.setRequestProperty("Authorization", " ............. ");
    // ....
    // poi urlConn.getInputStream()  invece di url.openStream() che facevi
    "Authorization" è il name del header.
  • Re: Lettura pagina

    andbin ha scritto:


    LeoTheGamer ha scritto:


    Poi in teoria non avrei alcun nome utente ma solo quell'api key.
    Non ho parlato di nome utente ....

    LeoTheGamer ha scritto:


    Se uso postman mi basta mettere nell header Authoriazion e Token (codice capi key)
    Gli header, l'ho già detto prima, si impostano sul URLConnection con il metodo setRequestProperty().
    URLConnection urlConn = url.openConnection();
    urlConn.setRequestProperty("Authorization", " ............. ");
    // ....
    // poi urlConn.getInputStream()  invece di url.openStream() che facevi
    "Authorization" è il name del header.

    Allora, questo è il codice che ho scritto:
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.net.URLConnection;

    public class Collegamento4 {
    public static void main(String[] args) throws Exception {
    URLConnection urlConn = new URLConnection();
    urlConn.setRequestProperty("Authorization", " ....");

    URL url = new URL("https://findwork.dev/api/job");

    try (BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), "UTF-8"))) {
    for (String line; (line = reader.readLine()) != null;) {
    System.out.println(line);
    }
    }

    }
    }
    Però mi segna questo come errore la riga di URLConnection urlConn=...
    Con il seguente messaggio: che non si può istanziare il tipo URLConnection.
    Come potrei fare per risolvere(sperando che il resto sia scritto bene)? Grazie
  • Re: Lettura pagina

    LeoTheGamer ha scritto:


    		URLConnection urlConn = new URLConnection();
    Non ho detto di fare new URLConnection()

    Ho scritto prima:
    URLConnection urlConn = url.openConnection();
    Cioè invocare openConnection() sull'oggetto URL, che ovviamente va dichiarato/creato prima.

    Setta esattamente il/gli header come hai fatto in postman ...
  • Re: Lettura pagina

    andbin ha scritto:


    LeoTheGamer ha scritto:


    		URLConnection urlConn = new URLConnection();
    Non ho detto di fare new URLConnection()

    Ho scritto prima:
    URLConnection urlConn = url.openConnection();
    Cioè invocare openConnection() sull'oggetto URL, che ovviamente va dichiarato/creato prima.

    E comunque: sicuro che va messo così?
    urlConn.setRequestProperty("Authorization", " cb6ed7937f423f6e700ab45dfdfd3b8ad553cde7 ");

    Setta esattamente il/gli header come hai fatto in postman ...
    Ciao buongiorno, in postman mi da in automatico 7 header , in più ci metto questo che contiene l'api key; dici che dovrei scriverli tutti e 8 su java?
  • Re: Lettura pagina

    LeoTheGamer ha scritto:


    in postman mi da in automatico 7 header , in più ci metto questo che contiene l'api key; dici che dovrei scriverli tutti e 8 su java?
    No, tutti no. Almeno però un Accept application/json sì, per chiarezza/sicurezza su quello che ti aspetti.
    Gli altri no, tipo Host, User-Agent (che postman mette il suo) e sicuramente non il Accept-Encoding perché se metti gzip, deflate, br vuol dire che lato Java dovresti essere preparato a gestire questi encoding, che è MOLTO più complicato.
  • Re: Lettura pagina

    andbin ha scritto:


    LeoTheGamer ha scritto:


    in postman mi da in automatico 7 header , in più ci metto questo che contiene l'api key; dici che dovrei scriverli tutti e 8 su java?
    No, tutti no. Almeno però un Accept application/json sì, per chiarezza/sicurezza su quello che ti aspetti.
    Gli altri no, tipo Host, User-Agent (che postman mette il suo) e sicuramente non il Accept-Encoding perché se metti gzip, deflate, br vuol dire che lato Java dovresti essere preparato a gestire questi encoding, che è MOLTO più complicato.
    Questo è il codice che ho ora(dove ho aggiunto degli header):
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.net.URLConnection;
    
    
    
    
    public class Collegamento6 {
    	private static URL url;
    
    	public static void main(String[] args) throws Exception {
    		
    		
    		URLConnection urlConn = url.openConnection();
    		urlConn.setRequestProperty("Authorization","Token .....");
    		urlConn.setRequestProperty("Accept","*/*");
    		urlConn.setRequestProperty("Connection","keep-alive");
    		
    		
    		URL url = new URL("https://findwork.dev/api/jobs");
    
    		try (BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), "UTF-8"))) {
    		    for (String line; (line = reader.readLine()) != null;) {
    		        System.out.println(line);	
    	}
    }
    
    
        }
    }
    
    E mi da questo errore nell'esecuzione: Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.net.URL.openConnection()" because "Collegamento6.url" is null
    at Collegamento6.main(Collegamento6.java:15)


    L'unica cosa che ho notato nel mio codice è che nella riga che contiene l'url, mi dice che la variabile url non viene mai usata, ma come è possibile? Visto che gli sto passando un url e negli altri codici dove non usavo l'api key mi andava tranquillamente
    Allegati:
    31574_c9cc822d733b307042f72eaf29df1891.png
    31574_c9cc822d733b307042f72eaf29df1891.png
  • Re: Lettura pagina

    LeoTheGamer ha scritto:


    E mi da questo errore nell'esecuzione: Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.net.URL.openConnection()" because "Collegamento6.url" is null
    at Collegamento6.main(Collegamento6.java:15)


    L'unica cosa che ho notato nel mio codice è che nella riga che contiene l'url, mi dice che la variabile url non viene mai usata, ma come è possibile? Visto che gli sto passando un url e negli altri codici dove non usavo l'api key mi andava tranquillamente
    Hai messo una variabile "di classe" (static) chiamata url ma questa NON è inizializzata (resta null, è questa che usi nel url.openConnection() causando il NullPointerException). Poi dopo hai dichiarato una variabile locale url che NON usi.
    Guarda che questi sono proprio "erroracci".

    P.S. non postare token validi!
  • Re: Lettura pagina

    andbin ha scritto:


    LeoTheGamer ha scritto:


    E mi da questo errore nell'esecuzione: Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.net.URL.openConnection()" because "Collegamento6.url" is null
    at Collegamento6.main(Collegamento6.java:15)


    L'unica cosa che ho notato nel mio codice è che nella riga che contiene l'url, mi dice che la variabile url non viene mai usata, ma come è possibile? Visto che gli sto passando un url e negli altri codici dove non usavo l'api key mi andava tranquillamente
    Hai messo una variabile "di classe" (static) chiamata url ma questa NON è inizializzata (resta null, è questa che usi nel url.openConnection() causando il NullPointerException). Poi dopo hai dichiarato una variabile locale url che NON usi.
    Guarda che questi sono proprio "erroracci".

    P.S. non postare token validi!
    Hai ragione, ora elimino i messaggi, comunque ce l'ho fatta , sono stra felice, ho stabilito la connessione e mi appare in console l elenco scritto in json. Comunque si, faccio ancora fatica a comprendere bene il java, l' iniziato a vedere 3-4 settimane fa ed ora devo fare questo progetto molto complicato(per me). Comunque ti ringrazio di cuore per la pazienza e disponibilità <3 .
Devi accedere o registrarti per scrivere nel forum
12 risposte