Visualizzazione risultati 1 fino 13 di 13

Discussione: cURL improvvisamente non pi funzionante

  1. #1
    radiosocialbeat non  connesso Neofita
    Data registrazione
    18-05-2015
    Messaggi
    5

    Predefinito cURL improvvisamente non pi funzionante

    Buonasera, da alcune settimane i contenuti di una mia pagina non sono pi visibili. Le chiamate cURL restituiscono NULL al posto del JSON precedente

    Il codice ha funzionato per mesi e non stato modificato. Inoltre lo ho provato localmente, salvando manualmente il json prelevabile dalla url del codice che segue, e funziona regolarmente. Ripeto ha funzionato per mesi. Mi aiutate a capire?

    Di seguito il codice in questione, utilizzato per leggere il nome ed il numero di follower di un utente instagram:

    Codice PHP:
    <?php
    $url 
    "https://www.instagram.com/rds_official/?__a=1";

    $ch curl_init();
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($chCURLOPT_TIMEOUT20 );
    $response curl_exec ($ch);
    curl_close($ch);

    var_dump($response);
    echo 
    '<br><br>errori: ';
    var_dump(curl_error($ch));
    echo 
    '<br><br>';

    $result json_decode($responsetrue);
    var_dump($result);
    echo 
    '<br><br>';

    echo 
    '<br><br>full name (_a): '.$result[graphql][user][full_name];
    echo 
    '<br><br>follower count (_a): '.$result[graphql][user][edge_followed_by][count];
    echo 
    '<br><br>following count (_a): '.$result[graphql][user][edge_follow][count];
    echo 
    '<br><br>igtv video (_a): '.$result[graphql][user][edge_felix_video_timeline][count];
    ?>
    Ultima modifica di dreadnaut : 04-09-2020 alle ore 18.36.36 Motivo: + tag [php] attorno al codice

  2. #2
    darbula non  connesso AlterGuru
    Data registrazione
    24-04-2011
    Messaggi
    2,028

    Predefinito

    Un array associativo pu essere unicamente racchiuso da apici singoli o apici doppi (altrimenti per php una costante), puoi mostrare l'errore?
    Comunque https://www.instagram.com/rds_official/?__a=1 effettua un redirect 302 https://www.instagram.com/accounts/l...ial/%3F__a%3D1 (%3F il punto interrogativo nella codifica percent enconding, cio non l'ho tratta come query string).
    Ultima modifica di darbula : 04-09-2020 alle ore 16.34.25

  3. #3
    L'avatar di dreadnaut
    dreadnaut non  connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    5,950

    Predefinito

    Confermo che il codice funziona in locale, ma non esattamente quello sopra. Come accennato da Darbula, l'accesso agli array causa un sacco di warning:
    Codice PHP:
    # no no
    echo '<br><br>full name (_a): '.$result[graphql][user][full_name];
    # corretto
    echo '<br><br>full name (_a): '.$result['graphql']['user']['full_name']; 
    L'altro problema che chiami curl_error dopo avere concluso la chiamata con curl_close, cos non ottieni il messaggio di errore che stai cercando.

    Guarda se ottieni pi informazioni chiamando curl_error al punto giusto:
    Codice PHP:
    $ch curl_init();
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($chCURLOPT_TIMEOUT20 );
    $response curl_exec ($ch);

    if (!
    $response) {
      echo 
    "<p>La richiesta ad Instagram  fallita: "curl_error($ch);
    }

    curl_close($ch); 
    Vedo un sacco di <br> in giro, quindi dopo tanti anni estraggo questo vecchio link
    chezDreadnaut
    "Un <BR/> impuro, punto."
    "I <P>&nbsp;</P> non hanno diritto di esistere."

  4. #4
    radiosocialbeat non  connesso Neofita
    Data registrazione
    18-05-2015
    Messaggi
    5

    Predefinito

    Vi ringrazio per l'attenzione,
    rimango un neofita che scrive codice a tempo perso, quindi commetto sempre molti errori ed approfitter per correggere e pulire quanto pi possibile.
    Ma in questo caso il punto un altro. Il codice di cui parlo ha funzionato continuativamente da ottobre 2018 a maggio 2020, tempo nel quale ho memorizzato i dati estratti nel MySql, poi improvvisamente il nulla.
    L'anomalia che il risultato delle cURL ora NULL mentre prima veniva correttamente decodificato il JSON prelevato.

    Lo stesso codice funziona in locale ma non funziona verso l'esterno.
    Di seguito il link del file che ho utilizzato per il test in locale.
    https://radiosocialbeat.altervista.o...am_profile.php
    Il codice cURL punta alla url "https://radiosocialbeat.altervista.org/php/sampleData6" dove salvato il JSON prelevato dalla url "https://www.instagram.com/rds_official/?__a=1".

    Ho messo i var_dump per cercare di capire cosa accade. Vedete il var_dump di $response (il JSON), quello di $result (l'array) e i dati finali estratti da esso.

    Se per la cURL punta direttamente a "https://www.instagram.com/rds_official/?__a=1" come nel link seguente
    https://radiosocialbeat.altervista.o..._profile_2.php
    allora come vedete il risultato NULL.
    Cosa accaduto?


  5. #5
    GraphOGLRisorse  connesso ora AlterGuru
    Data registrazione
    14-02-2015
    Messaggi
    1,059

    Predefinito

    Salve,
    il 26 maggio 2020, stato rimosso da AlterVista php 5.3. Ora la versione minore disponibile php 5.6

    Come menzionato da darbula, e mostrato da dreadnaut, negli array ci vanno gli apici. Inoltre, come le ha fatto notare dreadnaut, la chiusura di curl va dopo curl_error().
    Codice PHP:
     <?php
    $url 
    "https://www.instagram.com/rds_official/?__a=1";

    $ch curl_init();
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($chCURLOPT_TIMEOUT20 );
    $response curl_exec ($ch);

    var_dump($response);
    echo 
    '<br><br>errori: ';
    var_dump(curl_error($ch));
    echo 
    '<br><br>';
    curl_close($ch);

    $result json_decode($responsetrue);
    var_dump($result);
    echo 
    '<br><br>';

    echo 
    '<br><br>full name (_a): '.$result["graphql"]["user"]["full_name"];
    echo 
    '<br><br>follower count (_a): '.$result["graphql"]["user"]["edge_followed_by"]["count"];
    echo 
    '<br><br>following count (_a): '.$result["graphql"]["user"]["edge_follow"]["count"];
    echo 
    '<br><br>igtv video (_a): '.$result["graphql"]["user"]["edge_felix_video_timeline"]["count"];
    ?>
    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 04-09-2020 alle ore 20.27.37

  6. #6
    darbula non  connesso AlterGuru
    Data registrazione
    24-04-2011
    Messaggi
    2,028

    Predefinito

    Comunque credo che in locale esegue il redirect mentre in remoto no.. imposta questo su false https://curl.haxx.se/libcurl/c/CURLO...WLOCATION.html che comunque curl_setopt (in php).
    Lei riscontra un errore ma se non scritto in modo corretto per un programmatore un errore anche se visualizerebbe i dati.

  7. #7
    L'avatar di dreadnaut
    dreadnaut non  connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    5,950

    Predefinito

    Citazione Originalmente inviato da radiosocialbeat Visualizza messaggio
    Cosa accaduto?
    L'unico modo per sapere con certezza cosa non funziona chiamare curl_error() e stamparne il risultato. Senza di quello possiamo solo supporre.
    chezDreadnaut
    "Un <BR/> impuro, punto."
    "I <P>&nbsp;</P> non hanno diritto di esistere."

  8. #8
    radiosocialbeat non  connesso Neofita
    Data registrazione
    18-05-2015
    Messaggi
    5

    Predefinito

    Ho corretto gli apici e la posizione della chiamata a curl_error, inserendo il CURLOPT_FOLLOWLOCATION con valore false, come sotto.

    Codice PHP:
    <?php
    $url 
    "https://www.instagram.com/rds_official/?__a=1";

                    
    $ch curl_init();
                    
    curl_setopt($chCURLOPT_URL$url);
                    
    curl_setopt($chCURLOPT_FOLLOWLOCATIONfalse);
                    
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
                    
    curl_setopt($chCURLOPT_TIMEOUT20 );
                    
    $response curl_exec ($ch);
                    if (!
    $response) {
                      echo 
    "<p>echo di curl_error: "curl_error($ch);
                    }
    curl_close($ch); 

    echo 
    '<br><br>var_dump di $response: ';
    var_dump($response);

    echo 
    '<br><br>var_dump di $result: ';
    $result json_decode($responsetrue);
    var_dump($result);


    echo 
    '<br><br>Dati estratti da $result: ';
    echo 
    '<br><br>full name (_a): '.$result['graphql']['user']['full_name'];
    echo 
    '<br><br>follower count (_a): '.$result['graphql']['user']['edge_followed_by'][count];
    echo 
    '<br><br>following count (_a): '.$result['graphql']['user']['edge_follow'][count];
    echo 
    '<br><br>igtv video (_a): '.$result['graphql']['user']['edge_felix_video_timeline'][count];

    ?>
    l'output a video il seguente:

    Codice:
    echo di curl_error:
    
    var_dump di $response: string(0) ""
    
    var_dump di $result: NULL
    
    Dati estratti da $result:
    
    full name (_a):
    
    follower count (_a):
    
    following count (_a):
    
    igtv video (_a):
    Stessa cosa senza il CURLOPT_FOLLOWLOCATION. Scusate la mia ignoranza, ma non capisco il redirect: se incollo "https://www.instagram.com/rds_official/?__a=1" nella barra indirizzo ottengo direttamente da quella url a video il JSON cercato.
    Ultima modifica di dreadnaut : 05-09-2020 alle ore 19.43.49 Motivo: + tag [php] attorno al codice

  9. #9
    darbula non  connesso AlterGuru
    Data registrazione
    24-04-2011
    Messaggi
    2,028

    Predefinito

    Instagram necessita l'utente autenticato nel caso non sei autenticato effettua un redirect alla pagina di login.
    Il CURLOPT_FOLLOWLOCATION impostato su false era per testare se ottenevi lo stesso risultato dell'ambiente locale e remoto (cio senza redirect tra una pagina all'altra).
    Dovresti controllare e includere CURLOPT_HEADER di risposta nel tuo php curl.
    Dovresti anche modificare in
    Codice PHP:
    if (gettype($response) != 'string' && $response !== TRUE) {
    echo 
    "<p>echo di curl_error: "curl_error($ch);

    altrimenti se la pagina con contenuto vuoto a te sembra errore ma non lo .
    Ultima modifica di darbula : 05-09-2020 alle ore 15.49.23

  10. #10
    GraphOGLRisorse  connesso ora AlterGuru
    Data registrazione
    14-02-2015
    Messaggi
    1,059

    Predefinito

    Metta questo a inizio del codice dopo il tag php:
    Codice PHP:
    error_reporting(E_ALL); 
    cos se ci sono errori non dichiarati vengono mostrati.

    Cordiali saluti.

  11. #11
    L'avatar di dreadnaut
    dreadnaut non  connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    5,950

    Predefinito

    @darbula: in questo caso non c' motivo di modificare l'if come da te suggerito, la condizione equivalente. Se proprio vuoi, questo sufficiente:
    Codice PHP:
    if ($response === false) {
      echo 
    curl_error($ch);

    @radiosocialbeat: l'URL che sui sembra far parte della "Legacy API" che stata disabilitata di recente. Perch funzioni ancora da locale resta un mistero. Ho provato anche a copiare tutti gli header della richiesta dal browser, ma ogni chiamata server-2-server viene redirezionata alla pagina di login.

    Ho paura ti tocchi usare la nuova API, che richiede un paio di passi in pi per la registrazione e l'autenticazione

    [edit] forse questa libreria ti aiuta? https://github.com/aakatheeri/Instagram-Basic-API
    Ultima modifica di dreadnaut : 05-09-2020 alle ore 20.24.13
    chezDreadnaut
    "Un <BR/> impuro, punto."
    "I <P>&nbsp;</P> non hanno diritto di esistere."

  12. #12
    radiosocialbeat non  connesso Neofita
    Data registrazione
    18-05-2015
    Messaggi
    5

    Predefinito

    Ho provato a mettere la pagina su un altro hosting web e funziona. (Io non sono autenticato su instagram, da ogni pagina, senza fare login, con il suffisso "/?__a=1" si ottiene il JSON del feed pubblico).
    Devo controllare qualcosa a livello di permessi e/o abilitazioni su altervista? Ho gia' impostato il senza restrizioni nelle impoatazioni php - connessione server to server

  13. #13
    L'avatar di dreadnaut
    dreadnaut non  connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    5,950

    Predefinito

    Ho provato lo stesso codice su tre server: UK e DE stesso error, HU funziona.

    Documentazione + errori + incertezza = metodo altamente sconsigliato.
    Ultima modifica di dreadnaut : 05-09-2020 alle ore 21.57.37
    chezDreadnaut
    "Un <BR/> impuro, punto."
    "I <P>&nbsp;</P> non hanno diritto di esistere."

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •