"Null reference exception"? no, grazie, prendo un "unexpected T_VARIABLE"... Questo è il forum per imparare l'arte della programmazione o per chiedere un parere su una sessione di debug particolarmente ostica.
Regole del forum Ricorda di indicare chiaramente nell'oggetto il linguaggio ([C#] oppure [PHP], [Java], [HTML], ...), se la discussione ne riguarda uno in particolare!
Salve a tutti.
Per questioni di lavoro ho la necessità di creare un sito che, tramite le informazioni ottenute da un altro esegua calcoli utili a sgravare il mio lavoro e quello di tutti quelli che andranno ad utilizzarlo.
Nella sostanza dovrei instaurare una connessione dal mio sito ospitato su altervista.it ad un sito da dove prelevare un txt.
L'inghippo sta nel fatto che per prelevare il txt normalmente bisogna prima effettuare l'accesso all'area riservata.
Avendo a disposizione user e password in che modo posso ottenere il file direttamente dal mio sito?
Nella speranza di essermi spiegato decentemente attendo i vostri aiuti.
Ciao.
Grazie della risposta, visto che sono un programmatore in erba non ho nessuna confidenza con Curl, sapevo solo che esisteva .
Ho notato che quel codice funziona con pagine di questo tipo: http://agricon.altervista.org/main/riservato/prova.html
Però la mia esigienza era un'altra (infatti mi sono spiegato male):
L' riservata non è del tipo che ho linkato, ma è dello simile a quella di Turbolab:
si accede tramite una pagina di login che genera una sessione PHP e salva 2 cookie di sessione(non ho idea del perchè) nel browser; una volta ottenuto l'accesso mi posso muovere liberamente nel sito fino ad accedere al famoso file .txt.
In sostanza utilizzando Curl dovrei (almeno penso sia così) :
1. Effettuare l'accesso alla pagina di login (in sostanza si inviano tramite metodo POST l'user e la pwd alla pagina a cui punta il form di accesso).
2. Salvare i coockie di sessione provenienti da tale pagina.
3. Scaricare il .txt (inviando quindi al server i cookie precedentemente salvati).
C'è un po' da studiarsela, ma direi che puoi usare CURL (o simili) per POSTtare username e password. La gestione dei due cookie dovrebbe (ribadisco il condizionale) esserti trasparente (abiliti il parametro e il motore di CURL riceve+trasmette i cookie), per cui una volta POStato dovresti poter ricevere il tuo txt.
<?php
$url="http://paginaDiLogin.php";
$dati_post='user=usr&password=psw';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dati_post);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
$output = curl_exec($ch);
$url='http://generaFileTxt.php';
$dati_post='variabile1=1&variabile2=2&variabileN=N';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dati_post);
curl_setopt($ch, CURLOPT_COOKIE, 'Cookie: cookieDiSessione=1234567890');
$output = curl_exec($ch);
$url='http://fileTxt.txt';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPGET, 1); //settato perchè altrimenti la pagina dava errore in quanto non accettava ci fossero passaggi di variabili con POST
curl_setopt($ch, CURLOPT_COOKIE, 'Cookie: cookieDiSessione=1234567890');
$output = curl_exec($ch);
curl_close($ch);
//dopo aver salvato il txt in $output lo si salva nel percorso desiderato
$path="../cartella";
$name = basename($url);
$fp = fopen($path."/".$name,"w");
fwrite($fp,$output);
fclose($fp);
echo $output;
?>
Il tutto funziona, ma non sono sicuro che continuerà ad essere così perchè come puoi vedere ho inserito manualmente i cookie da inviare al server in quanto non ho trovato un'opzione di CURL che gli permetta di gestirli autonomamente. Tali cookie li ho semplicemente copiati da quelli presenti nel mio browser, dopo l'accesso manuale, quindi quando la sessione nel server scadrà (non è detto considerando che quel sito non è proprio ben fatto) non avrò più l'accesso.
Volendo potrei quindi eliminare il primo blocco di codice che è proprio quello da cui si dovrebbero ottenere i cookie "freschi", ma sono sicuro che un'opzione per gestirli c'è o almeno un'opzione per estrarli.
Comunque grazie mille per il tuo suggerimento che mi ha illuminato
Purtroppo, dopo svariati tentativi, mi devo arrendere perchè il sito genera cookie a caso (e non sempre gli stessi).
Ho però intuito qualcosa che potrebbe fare al caso dei meno fortunati e che operano con un sito "convenzionale" (io sono fortunato perchè i cookie di sessione prelevati 5 giorni fa funzionano ancora e penso che continuerà ad essere così ) se si setta l'opzione per far apparire l'header http i cookie appaiono e poi con le espressioni regolari si possono prelevare e salvare su un'array.
Posto il codice un po' abbozzato e non sono sicuro che sia perfettamente funzionante visto che anche con le regex non ho ancora molta confidenza...
Quanto suggerito da Zane nel precedente messaggio dovrebbe funzionare, se implementato correttamente, anche nel tuo caso.
Il nome dei file cookiejar (dove cURL registra i cookie HTTP inviati da un sito (non quelli impostati via JavaScript)) e cookiefile (dove cURL attinge per inviare i cookie ad un sito) devono coincidere.
Finalmente ce l'ho fatta!!!
Dopo svariati tentativi(ed imprecazioni ) ho finalmente capito che CURL faceva il suo lavoro alla perfezione con le opzioni suggerite da Zane...
Il problema stava nel sito che, una volta inviati i dati di login tramite POST effettuava 2 redirect che venivano seguiti tramite l'opzione "CURLOPT_FOLLOWLOCATION" settata a TRUE ma le pagine in realtà non venivano aperte perchè erano con protocollo https e il certificato non veniva accettato.
Ho risolto inserendo l'opzione "CURLOPT_SSL_VERIFYPEER" settata a false.
Ora tutti i cookie vengono catturati e salvati su file.
Inserendo un messaggio, dichiari di aver letto e accettato il regolamento di partecipazione.
Nello specifico, sei consapevole che ti stai assumendo personalmente la totale responsabilità delle tue affermazioni, anche in sede civile e/o penale,
manlevando i gestori di questo sito da ogni coinvolgimento e/o pretesa di rivalsa.
Dichiari inoltre di essere consapevole che il messaggio sarà visibile pubblicamente, accetti di diffonderlo con licenza
CC BY-NC-SA 3.0 (con attribuzione a "TurboLab.it") e rinunci ad ogni forma di compensazione (economica o altro).
Rinunci inoltre esplicitamente a qualsiasi pretesa di cancellazione del messaggio.