Δοκίμασα να κάνω μια διαφορετική δοκιμή να χρησιμοποιήσω το OpenData API της δι@ύγειας σε php αυτή τη φορά μήπως και έχω περισσότερη τύχη. Μετά από δοκιμές και άπειρα “500 internal errors” κατέληξα σε αυτά τα δύο κομμάτια κώδικα (μη ρωτήσετε που τα βρήκα, ούτε που θυμάμαι, κάπου στο internet) με όνομα works που δείχνει να δουλεύει και με όνομα fails που αρνείται πεισματικά και επιστρέφει πάντα 500 internal error.
Στο ini to allow_url_fopen το έχω on. Εκανα και το allow_url_include on (που δεν χρειάζεται αλλά να υπάρχει), έβαλα και το user_agent=”PHP” μιας και το ανέφερε και αυτό κάποιος στο documentation της file_get_contents.
Αυτό που παίρνω όταν τρέχω το αρχείο από κονσόλα είναι:
[dva@test ~]# php diavgeia.php PHP Warning: file_get_contents(http://opendata.diavgeia.gov.gr/api/decisions?ada=%CE%924%CE%A9%CE%9B%CE%A7-%CE%A8%CE%9A%CE%92): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error in /var/www/html/test/xml/diavgeia.php on line 19 SimpleXMLElement Object ( [queryInfo] => SimpleXMLElement Object ( [count] => 1 [from] => 1 [order] => desc [total] => 1 ) )
Το οποίο δείχνει ότι η function works πέρασε, η fails κράσαρε κάτι στον server της διαύγειας, και μετά τυπώνει το xml που διάβασε η works, (για τη fails δε δείχνει τίποτα).
Τελικά έτσι έπαιξε και η function fails:
function fails($url)
{
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Connection:Keep-AlivernAccept:*/*rn"
)
);
$context = stream_context_create($opts);
$xmlstr = file_get_contents($url,false,$context);
return $xmlstr;
}
Τώρα γιατί θέλει σώνει και καλά να του δώσεις options και context δεν έχω ιδέα. Βέβαια δεν πάει όσο γρήγορα πάει με curl, αλλά “φαίνεται να παίζει”.
Αν υπάρχει καμιά ιδέα γιατί γίνεται αυτό καλοδεχούμενη…