Visualizzazione risultati 1 fino 8 di 8

Discussione: Suddividere con explode dei dati prelevati con cURL in seguito ad una richiesta POST

  1. #1
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito Suddividere con explode dei dati prelevati con cURL in seguito ad una richiesta POST

    Buongiorno,
    sono tre giorni che lavoro sul seguente codice:
    Codice PHP:
    $url = "http://sito.com/pagina.php";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,"var1=valore&var2=valore");

    curl_exec($ch);
    curl_close($ch);
    In pratica questo codice invia dei valori (var1 e var2) ad una pagina da me scelta usando il metodo POST.

    Il mio intento era, dopo aver inviato i dati ricevere la risposta da quella pagina e mostrarla a video dopo averla suddivisa in parti con explode() (in quanto la risposta è formata più o meno così: stato|risposta|altro) e quindi ho modificato il codice così:
    Codice PHP:
    $url = "http://sito.com/pagina.php";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,"var1=valore&var2=valore");

    $ch2 = curl_init($url);
    curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch2);
    curl_close($ch2);

    curl_exec($ch);
    curl_close($ch);
    Però effettuando vari test, stmpando le variabili e tutto mi sono accorto che parte del codice è inutile e quindi è tornato così:
    Codice PHP:
    $url = "http://sito.com/pagina.php";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,"var1=valore&var2=valore");

    curl_exec($ch);
    curl_close($ch);
    Effettuando altri test ho notato che curl_exec($ch) stampa a video la risposta dalla pagina PHP dopo che ha ricevuto i dati così ho pensato di agire su questa riga per suddividere i dati:
    Codice PHP:
    $url = "http://sito.com/pagina.php";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,"var1=valore&var2=valore");

    $abc = curl_exec($ch);
    curl_close($ch);

    $expl = explode("|",$abc);

    exit(
    print_r($expl));
    Ed eccoci giunti al problema...a questo punto dovrei vedere una cosa simile:
    Codice:
    Array( [0] => "stato", [1] => "messaggio", [2] => "altro")
    Invece visualizzo:
    Codice:
    stato|messaggio|altroArray( [0] => "stato", [1] => "messaggio", [2] => "altro")
    Questo mi fa capire che c'è un'altra che mostra a video il contenuto prima di exit(print_r($expl))...ho provato a spostare questa riga un po' ovunque ma purtroppo continuo a ricevere lo stesso risultato...come posso risolvere?
    Apprezzi l'aiuto? Offrimi un caffè!

  2. #2
    Guest

    Predefinito

    Prova con list:

    Codice PHP:
    list($stato, $messaggio, $altro) = explode("|", $abc);

  3. #3
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito

    Il problema che a volte altro non è l'ultimo dato...cioè può variare quanti il numero di separatori (|) presenti:

    Codice:
    stato|messaggio|altro
    Codice:
    stato|messaggio|altro|news
    Codice:
    stato|messaggio|altro|codice|password
    Non gestisco io la risposta da parte del server esterno...
    Apprezzi l'aiuto? Offrimi un caffè!

  4. #4
    Guest

    Predefinito

    Non è sempre l'ultimo, ma non cambia di posizione, giusto?

    Cioè i dati vengono disposti sempre in un certo ordine e non in ordine casuale ad esempio:
    Codice:
    messaggio|altro|stato|password
    Se altro si trova sempre al terzo posto, prova così

    Codice PHP:
    list($stato, $messaggio, $altro, ) = explode("|", $abc);

  5. #5
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito

    Si l'ordine dei primi tre non dovrebbe cambiare metre per gli ultimi non posso esserne sicuro...comunque sia lo stesso visualizzo 2 output al posto di 1 (l'explode) capito?

    Il problema principale è quello...devo capire chi è il primo output.
    Apprezzi l'aiuto? Offrimi un caffè!

  6. #6
    Guest

    Predefinito

    Non ho capito molto bene , stai dicendo che quando stampi $stato, invece di un solo output ne ricevi 2?
    Se è così non so proprio che fare, aspetta persone più esperte.

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

    Predefinito

    Il colpevole è curl_exec(), che di default manda in output ciò che riceve dall'altra pagina.

    Per evitare questo devi settare l'opzione CURLOPT_RETURNTRANSFER usando curl_setopt(), e.g.
    Codice PHP:
    ...
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $abc = curl_exec($ch);
    vedi la pagina degli esempi sull'uso di CURL.

  8. #8
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito

    Forse sono io che non mi sono spiegato bene, questo codice:
    Codice PHP:
    $url = "http://sito.com/pagina.php";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,"var1=valore&var2=valore");

    $abc = curl_exec($ch);
    curl_close($ch);

    $expl = explode("|",$abc);

    exit(
    print_r($expl));
    Dovrebbe stamparmi un array con il risultato ottenuto dalla pagina a cui ha inviato due valori in post...però al posto di stampare una sola volta il contenuto, me lo stampa due volte.

    In pratica e come se io facessi:
    Codice PHP:
    <?php
    $var
    = "ciao|hello|bye";

    $exp = explode("|",$var);

    print_r($exp);
    ?>
    Dovrebbe mostrare Array( [0] => "ciao", [1] => "hello", [2] => "bye")
    Invece mostra ciao|hello|worldArray( [0] => "ciao", [1] => "hello", [2] => "bye")
    Capito? E' come se io facessi:
    Codice PHP:
    echo $var; print_r($exp);

    EDIT: @dreadnaut Come puoi leggere più su ho capito che il colpevole era quello infatti ho aggiunto davanti ad esso $response = ... per evitare ciò dopo che ho inviato i dati tramite post devo aggiungere quella riga da te postata?

    EDIT 2: Sembrerebbe funzionare, grazie mille dreadnaut.
    Ultima modifica di miki92 : 25-07-2009 alle ore 12.48.11
    Apprezzi l'aiuto? Offrimi un caffè!

Regole di scrittura

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