Steam API (PHP), CURL και προβλήματα όταν η υπηρεσία έιναι down

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
philos
Δημοσιεύσεις: 260
Εγγραφή: 30 Αύγ 2007 23:32

Steam API (PHP), CURL και προβλήματα όταν η υπηρεσία έιναι down

Δημοσίευση από philos » 08 Αύγ 2015 15:43

Καλησπέρα παιδιά!

Υπάρχει το εξής πρόβλημα. Πρόκειται για ένα vBulletin addon που χρησιμοποιεί το Steam API για να κάνει requests. Στην PHP χρησιμοποιείται και το CURL.
Όμως, αν το API - υπηρεσία είναι down, η σελίδα που προσπαθεί να κάνει το request:
α) αργεί πάρα πολύ να φορτώσει
β) Ρίχνει τον server!

Ένα τμήμα κώδικα είναι το εξής:

Κώδικας: Επιλογή όλων

	$url = sprintf("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=%s&steamids=%s",
		$api_key,
		$steam_id);

	$curl_time = microtime(1);
	// Needs curl to actually be able to pull data from steam api because of the special response-behaviour.
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_URL, $url );
    @curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
    curl_setopt( $ch, CURLOPT_MAXREDIRS, 5 );
    curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $vbulletin->options['stc_curl_timeout'] ); #rc1: helps with page delay if steam is down
    $raw_json = curl_exec( $ch );
    $http_response_header = curl_getinfo( $ch );
	$curl_errno = curl_errno($ch);
	$curl_error = curl_error($ch);
	curl_close($ch);
Το CURLOPT_CONNECTTIMEOUT έχει οριστεί σε "5", χωρίς όμως να διορθώνεται το πρόβλημα.
Καμιά ιδέα; :D

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Steam API (PHP), CURL και προβλήματα όταν η υπηρεσία έιναι down

Δημοσίευση από burnmind » 08 Αύγ 2015 20:27

Από το manual:
CURLOPT_CONNECTTIMEOUT: The number of seconds to wait while trying to connect.
Για να μη σταματάει η σύνδεση στα 5 δευτερόλεπτα, τότε λογικά είναι επιτυχημένη (έχει γίνει δηλαδή connection), άρα το API δεν είναι down, απλά αργεί (πιθανότατα υπερβολικά, οπότε να πιάνει το όριο που έχεις ορίσει στο max_execution_time του php.ini σου, οπότε σταματάει το execution ολόκληρου του script - αυτό είναι απλά εικασία καθώς δεν αναφέρεις τι error παίρνεις στο τέλος).

Δοκίμασε να παίξεις με κάποιο από τα παρακάτω options (ρίξε και μια ματιά σε όλα τα διαθέσιμα, πιθανό να υπάρχει κάποιο άλλο που ταιριάζει περισσότερο στο πρόβλημά σου):
CURLOPT_TIMEOUT: The maximum number of seconds to allow cURL functions to execute.
CURLOPT_LOW_SPEED_TIME: The number of seconds the transfer speed should be below CURLOPT_LOW_SPEED_LIMIT before PHP considers the transfer too slow and aborts.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες