Pokusao sam kompletno da rekontruisem POST zahtev koji ide ka serveru NBS da bi se u odgovoru dobila kursna lista i trebalo bi da header tog zahteva izgleda ovako:
Code:
POST http://www.nbs.yu/data/page.ph...s_page=kursnaLista.jsp?lang=sr HTTP/1.1
Host: www.nbs.yu
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Referer: http://www.nbs.yu/data/page.ph...p;nbs_page=kl_form.jsp?lang=sr
Content-Type: application/x-www-form-urlencoded
Content-Length: 52
datum=27.12.2006&eksport=ascii&clientIP=80.93.235.82
Do sada sam varijable datum, eksport i clientIP slao preko GET-a i to je radilo... juce je odjednom prestalo da radi, a ja sam se bacio na zadatak da PHP te stvari salje preko POST-a. Ovde cu da ostavim kod koji kod mene automatski preuzima kursnu listu, i prvu verziju koja je radila do prekjuce, i drugu verziju sa POST varijablama koja mi i dalje ne radi. Izgleda da je problem u tome sto file_get_contents() funkcija, ne moze da kao argument prihvati resource koji napravi funkcija stream_context_create()... bilo kako bilo, trenutno sam jako zauzet da bi kopao danima(?) :) zasto sve ovo ne radi, ako neko moze da preuzme stafetu, bio bih zahvalan, a sada i stari i novi kod:
stari:
Code:
<?
$filename = 'http://www.nbs.yu/data/page.ph...naLista.jsp?lang=sr&datum='.date('d').'.'.date('m').'.'.date('Y').'&vrsta=1&eksport=ascii&clientIP=208.68.210.233&SUBMIT=Prikaži';
$filelocal = 'kliste/Kl'.date('y').date('m').date('d').'.asc';
if(!file_exists($filelocal)) { //ako vec nije uspeo da skine u prethodnom pokusaju
$str = file_get_contents($filename);
//if (date('D') != 'Sat' && date('D') != 'Sun' && strlen($str) > 500) {
if (date('D') != 'Sat' && date('D') != 'Sun') {
$fp = fopen($filelocal,"w");
fwrite($fp,$str);
fclose($fp);
}
else { //pravi se kopija fajla na disku za danas a od juce... TREBA DA SE POVEDE RACUNA AKO SE od 01 oduzima 1....
$d = date('j')-1;
if ($d < 10) $d = '0'.$d;
$m = date('m');
$y = date('y');
if(date('j') == '1') {
switch(date('m')) {
case '01': $d = '31'; $m = '12'; $y = date('Y') - 1; $y = substr($y,2,2); break;
case '02': $d = '31'; $m = '01'; break;
case '03':
//AKO JE PRESTUPNA GODINA.
if (mcal_is_leap_year(date('Y')) == 0) $d = '28'; else $d = '29';
$m = '02'; break;
case '04': $d = '31'; $m = '03'; break;
case '05': $d = '30'; $m = '04'; break;
case '06': $d = '31'; $m = '05'; break;
case '07': $d = '30'; $m = '06'; break;
case '08': $d = '31'; $m = '07'; break;
case '09': $d = '31'; $m = '08'; break;
case '10': $d = '30'; $m = '09'; break;
case '11': $d = '31'; $m = '10'; break;
case '12': $d = '30'; $m = '11'; break;
}
}
$fileyesterday = 'liste/Kl'.$y.$m.$d.'.asc';
copy($fileyesterday,$filelocal);
}
}
?>
novi:
Code:
<?
error_reporting(E_ALL);
function http_build_query($a,$b='',$c=0){
if (!is_array($a)) return false;
foreach ((array)$a as $k=>$v){
if ($c) $k=$b."[".$k."]"; elseif (is_int($k)) $k=$b.$k;
if (is_array($v)||is_object($v)) {$r[]=http_build_query($v,$k,1);continue;}
$r[]=$k."=".urlencode($v);
}
return implode("&",$r);
}
$filename = 'http://www.nbs.yu/data/page.ph...s_page=kursnaLista.jsp?lang=sr';
$danas = date('d').'.'.date('m').'.'.date('Y');
$postdata = http_build_query(
array(
'datum' => $danas,
'eksport' => 'ascii',
'clientIP' => '208.68.210.233'
)
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => "Content-type: application/x-www-form-urlencoded\r\n" .
"Host: www.nbs.yu\r\n" .
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1\r\n" .
"Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n" .
"Accept-Language: en-us,en;q=0.5\r\n" .
"Referer: http://www.nbs.yu/data/page.ph...p;nbs_page=kl_form.jsp?lang=sr\r\n" .
"Content-Length: 54",
'content' => $postdata
)
);
/*
if (function_exists('stream_context_create')) {
echo "available.<br />\n";
} else {
echo "not available.<br />\n";
}
*/
$context = stream_context_create($opts);
$filelocal = 'liste/Kl'.date('y').date('m').date('d').'.asc';
echo "danas: " . $danas."<br>";
echo "postdata: " . $postdata."<br>";
print_r($opts);
if(!file_exists($filelocal)) { //ako vec nije uspeo da skine u prethodnom pokusaju
echo "da li je ovo normalno";
$str = file_get_contents($filename, false, $context);
echo $str;
//if (date('D') != 'Sat' && date('D') != 'Sun' && strlen($str) > 500) {
if (date('D') != 'Sat' && date('D') != 'Sun') {
$fp = fopen($filelocal,"w");
fwrite($fp,$str);
fclose($fp);
}
else { //pravi se kopija fajla na disku za danas a od juce... TREBA DA SE POVEDE RACUNA AKO SE od 01 oduzima 1....
$d = date('j')-1;
if ($d < 10) $d = '0'.$d;
$m = date('m');
$y = date('y');
if(date('j') == '1') {
switch(date('m')) {
case '01': $d = '31'; $m = '12'; $y = date('Y') - 1; $y = substr($y,2,2); break;
case '02': $d = '31'; $m = '01'; break;
case '03':
//AKO JE PRESTUPNA GODINA.
if (mcal_is_leap_year(date('Y')) == 0) $d = '28'; else $d = '29';
$m = '02'; break;
case '04': $d = '31'; $m = '03'; break;
case '05': $d = '30'; $m = '04'; break;
case '06': $d = '31'; $m = '05'; break;
case '07': $d = '30'; $m = '06'; break;
case '08': $d = '31'; $m = '07'; break;
case '09': $d = '31'; $m = '08'; break;
case '10': $d = '30'; $m = '09'; break;
case '11': $d = '31'; $m = '10'; break;
case '12': $d = '30'; $m = '11'; break;
}
}
$fileyesterday = 'liste/Kl'.$y.$m.$d.'.asc';
copy($fileyesterday,$filelocal);
}
}
?>