Devo fare uno script che, lanciato periodicamente, scarichi un file da un sito, il problema è che questo file non ha un link diretto in GET, ma si scarica con un bottone "download" che invia una richiesta POST...
con questa funzioncina riesco a mandare la richiesta post correttamente:
Codice PHP:
function PostRequest($url, $referer, $var)
{
//converto le variabili dell'array in una stringa
$data = array();
foreach ($var as $k=>$v)
{
$data[] = "$k=$v";
}
$data = implode('&', $data);
//parsing dell'url
$url = parse_url($url);
if ($url['scheme'] != 'http') die('Only HTTP request are supported !');
$host = $url['host'];
$path = $url['path'];
//Apro un socket verso l'host
$fp = fsockopen($host, 80);
//Invio la richiesta post
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);
//Preparo un file di output
$output = fopen('output','w');
while(!feof($fp))
{
//ricevo la risposta
$temp = fread($fp,128);
fwrite($output,$temp);
}
//chiudo socket e file
fclose($fp);
fclose($output);
/
}
....ma:
1) (problema minore) scrivendo tutto sul file mi scrivo anche gli header.. mi chiedevo se c'era un metodo rapido di parsing per scartare l'header man mano che arriva, altrimenti me lo faccio io con un ciclo che legge carattere per carattere fino a che non trova la fine dell'header (\r\n\r\n).. chiedo conferma della correttezza.
2) probelma vero:
il file originale, scaricato a mano dal browser, inizia così:
TC TOG GO_Term ET_Name Tentative_Annotation Unique_Oligo
TC302922 apomucin;submaxillary mucin^^submaxillary apomucin [Sus scrofa domestica] Cluster: Submaxillary apomucin; n=1; Sus scrofa domestica|Rep: Submaxillary apomucin - Sus scrofa, complete GACGAGAGTATGACCAAGGAAGTGTCACCTCAGTTGGCTGCAACAAATGT ACTTGCATAAAAGGATCTTG
etc etc
Il file scaricato dallo script inizia (dopo l'header che per ora non sto scartando) così:
1
3a
TC TOG GO_Term ET_Name Tentative_Annotation Unique_Oligo
109
TC302922 apomucin;submaxillary mucin^^submaxillary apomucin [Sus scrofa domestica] Cluster: Submaxillary apomucin; n=1; Sus scrofa domestica|Rep: Submaxillary apomucin - Sus scrofa, complete GACGAGAGTATGACCAAGGAAGTGTCACCTCAGTTGGCTGCAACAAATGT ACTTGCATAAAAGGATCTTG
etc etc
insomma, tra una riga e l'altra ci sono ei caratteri spuri che non capisco da dove vengono fuori.... qualche idea?