Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    18

    Caricamento immagine con curl errore 400

    Buona domenica a tutti! Ho un problema che da solo non riesco a risolvere e avrei bisogno del vostro aiuto. Ho creato una pagina web in cui includere tramite curl degli appunti creati con google docs e presenti su google drive.

    Codice PHP:
    $ch curl_init();
    curl_setopt($chCURLOPT_USERAGENT'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)');
    curl_setopt($chCURLOPT_NOBODYfalse);
    curl_setopt($chCURLOPT_URL$url);curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    $page curl_exec($ch);
    curl_close($ch);

    echo 
    $page
    Ho inserito in una pagina web questo codice e così facendo riesco a vedere buona parte del testo, tuttavia, non capisco perché, tutte le formule matematiche creato con docs (che vengono qui rappresentate tramite immagini) mi generano il seguente errore:

    codice:
    https://www.google.com/chart?cht=tx&chf=bg,s,FFFFFF00&chco=000000&chl=ADD%2…%5C%7B%28u%29%5C+%5C+se%5C+L%3D%5CLambda%7B%7D%5C+%5C+e%5C+%5C+k%3D1%5C%7D Failed to load resource: the server responded with a status of 400 (OK)

    Avete idea di come possa risolvere?

  2. #2
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Google a me risponde correttamente da quell'url, con quei headers. Puoi aggiungere il tuo $url​?
    Errore 400 significa
    The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.
    quindi controlla cosa stai inviando.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    18
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    Google a me risponde correttamente da quell'url, con quei headers. Puoi aggiungere il tuo $url​?
    Errore 400 significa
    quindi controlla cosa stai inviando.
    Si l'indirizzo dell'immagine è corretto, sembra che il curl faccia la chiamata in modo sbagliato. La pagina in cui si verifica l'errore è questa: pagina sito

    Che non fa altro che mandare alla curl il parametro passato per get, se apri la pagina noterai che tutte le formule non vengono caricate e che generano tutti l'errore che ti ho indicato.

    In precedenza avevo già provato a chiedere su un altro forum, mi avevano consigliato di fare un urlencode() di tutti gli indirizzi delle immagini, per questo ho provato ad aggiungere questo codice:

    Codice PHP:
    /*raplace url image*/$patterns "/<img[^s]+src=\"([^\"]+)\"/";preg_match_all($patterns$page$link_array);
    $link_array $link_array[1];$new_patterns = array();$replacement = array();foreach($link_array as $link) {  $new_patterns[] = "/".str_replace("/""\/"preg_quote($link))."/";  $replacement[] = str_replace(" """urldecode($link));}
    $page preg_replace($new_patterns$replacement$page); 
    Il codice aveva effetto, nel senso che modificava tutti gli indirizzi ma non risolveva il problema.

  4. #4
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    La pagina in cui si verifica l'errore è questa: pagina sito
    Sai quanto è pericoloso fare una cosa del genere?
    mi avevano consigliato di fare un urlencode() di tutti gli indirizzi delle immagini
    L'unico motivo per fare una cosa del genere è per corrompere tutti gli url.
    Non vedi le immagini perché google impedisce la visualizzazione delle stesse se vengono linkate fuori da uno dei domini di google (hotlinking). Puoi fare altre richieste per scaricare tutte le immagini (ti basta aggiungere come Referer quello di google), e usare quelle al posto delle immagini originali.
    Ultima modifica di .Kurt; 11-10-2015 a 17:48

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    18
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    Sai quanto è pericoloso fare una cosa del genere?

    L'unico motivo per fare una cosa del genere è per corrompere tutti gli url.
    Non vedi le immagini perché google impedisce la visualizzazione delle stesse se vengono linkate fuori da uno dei domini di google (hotlinking). Puoi fare altre richieste per scaricare tutte le immagini (ti basta aggiungere come Referer quello di google), e usare quelle al posto delle immagini originali.

    Tranquillo poi il get sparirà, per il resto puoi essere più preciso? Ho scritto questo ma non è cambiato nulla:
    Codice PHP:
    $ch curl_init();
    curl_setopt($chCURLOPT_USERAGENT'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)');
    curl_setopt($chCURLOPT_NOBODYfalse);curl_setopt($chCURLOPT_URL$url);curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($chCURLOPT_REFERER'http://www.google.com/2');
    $page curl_exec($ch);
    curl_close($ch); 

  6. #6
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Tu stai richiedendo la pagina, non le immagini. Le immagini che vedi in quella pagina sono recuperate separatamente dal tuo browser, stai descrivendo un altro problema, che non c'entra nulla con la richiesta che fai per recuperare il documento.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    18
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    Tu stai richiedendo la pagina, non le immagini. Le immagini che vedi in quella pagina sono recuperate separatamente dal tuo browser, stai descrivendo un altro problema, che non c'entra nulla con la richiesta che fai per recuperare il documento.
    Ciao, ho capito il problema ma non vedo la possibile soluzione. Puoi darmi qualche dritta?

  8. #8
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Una soluzione che mi viene in mente, che ti avevo detto precedentemente, è quella di recuperare tutte le immagini singolarmente e di sostituirle alle originali. Se esegui
    codice:
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/chart?cht=tx&chf=bg,s,FFFFFF00&chco=000000&chl=ADD%2…%5C%7B%28u%29%5C+%5C+se%5C+L%3D%5CLambda%7B%7D%5C+%5C+e%5C+%5C+k%3D1%5C%7D');
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com/');
    $image = curl_exec($ch);
    curl_close($ch); 
    
    
    // usa $image
    riesci a recuperare correttamente l'immagine? Se sì, puoi fare N richieste per le N immagini presenti nel documenti che ti interessa. Hai già un pezzo di codice con cui puoi recuperare tutti i link delle immagini. Una volta recuperati tutti i contenuti delle immagini, puoi sostituirle agli originali. Invece di urlencodarle come ti hanno fatto fare, puoi trasformarle in
    codice:
    <img src="data:image/png;base64,<?php echo base64_encode($image_che_ho_recuperato_da_curl); ?>" />
    o, ancora meglio, salvarle in qualche cartella per poterle riutilizzare successivamente, visto più immagini ci sono nel documento, più richieste devi fare, più tempo lo script ci impiega per fare tutto.

    In breve, dovresti fare come fa la funzione "Salva la pagina con nome" del tuo browser: oltre alla pagina stessa, salvi anche tutte le risorse che vengono utilizzate al suo interno (nel caso del browser sono css, immagini, js vari, etc.)

    L'altra soluzione è quella di includere semplicemente il documento con un iframe, senza scaricare nulla.
    Ultima modifica di .Kurt; 12-10-2015 a 11:10

  9. #9
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    Una soluzione che mi viene in mente, che ti avevo detto precedentemente, è quella di recuperare tutte le immagini singolarmente e di sostituirle alle originali. Se esegui
    codice:
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/chart?cht=tx&chf=bg,s,FFFFFF00&chco=000000&chl=ADD%2…%5C%7B%28u%29%5C+%5C+se%5C+L%3D%5CLambda%7B%7D%5C+%5C+e%5C+%5C+k%3D1%5C%7D');
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com/');
    $image = curl_exec($ch);
    curl_close($ch); 
    
    
    // usa $image
    riesci a recuperare correttamente l'immagine? Se sì, puoi fare N richieste per le N immagini presenti nel documenti che ti interessa. Hai già un pezzo di codice con cui puoi recuperare tutti i link delle immagini. Una volta recuperati tutti i contenuti delle immagini, puoi sostituirle agli originali. Invece di urlencodarle come ti hanno fatto fare, puoi trasformarle in
    codice:
    <img src="data:image/png;base64,<?php echo base64_encode($image_che_ho_recuperato_da_curl); ?>" />
    o, ancora meglio, salvarle in qualche cartella per poterle riutilizzare successivamente, visto più immagini ci sono nel documento, più richieste devi fare, più tempo lo script ci impiega per fare tutto.

    In breve, dovresti fare come fa la funzione "Salva la pagina con nome" del tuo browser: oltre alla pagina stessa, salvi anche tutte le risorse che vengono utilizzate al suo interno (nel caso del browser sono css, immagini, js vari, etc.)

    L'altra soluzione è quella di includere semplicemente il documento con un iframe, senza scaricare nulla.
    Però prima di scaricare tutte le pagine, dovrebbe parsare la pagina alla ricerca di tutte la immagini giusto ?

  10. #10
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Non è una cosa difficile da fare. Ma rimane sempre una operazione costosa. Io preferirei di gran lunga questa soluzione:
    L'altra soluzione è quella di includere semplicemente il documento con un iframe, senza scaricare nulla.
    Ultima modifica di .Kurt; 12-10-2015 a 12:04

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.