Προς το περιεχόμενο

Curl - PHP - Πρόβλημα


Uberalles_gr

Προτεινόμενες αναρτήσεις

Καλημέρα σε όλη την κοινότητα,

 

έχω μια function όπου χρησιμοποιώ την curl για να στείλω δεδομένα σε έναν server. Ο κώδικας είναι ο παρακάτω:

function httpsPost($Url,$strRequest) {
   
    $ch=curl_init();
    curl_setopt($ch, CURLOPT_URL, $Url);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 180);
    curl_setopt($ch, CURLOPT_TIMEOUT, 240);
    curl_setopt($ch, CURLOPT_POST, 1) ;
    curl_setopt($ch, CURLOPT_POSTFIELDS, $strRequest);
    $result = curl_exec($ch);
    $err = curl_errno($ch);
    $errmsg = curl_error($ch);
    $header = curl_getinfo($ch);
    curl_close($ch);

    $header['errno'] = $err;
    $header['errmsg'] = $errmsg;
    $header['content'] = $result;

	return $header;
}

Το πρόβλημά μου είναι ότι παίζει μια χαρά ενώ κάποιες φορές βγάζει τα παρακάτω error:

- 100 Operation timed out after 240000 milliseconds with 0 bytes received

- 100 Failure when receiving data from the peer

 

Μήπως ξέρετε τι μπορεί να φταίει;

Είναι δικό μου θέμα στον κώδικα, πρέπει να προσθέσω/αφαιρέσω κάτι;

Είναι θέμα του server που χτυπάω;;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

www.php.net

 

Just a quick note: if you want to use

curl_getinfo() with option CURLINFO_HEADER_OUT in order to debug your

cURL request, you must add curl_setopt($handle, CURLINFO_HEADER_OUT,

true); first while specifying the options.

 

 

 

 

 

 

www.php.net

 

Here are the response codes ready for pasting

in an ini-style file. Can be used to provide more descriptive message,

corresponding to 'http_code' index of the arrray returned by

curl_getinfo().

 

These are taken from the W3 consortium HTTP/1.1: Status Code Definitions, found at

 

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

 

 

 

[informational 1xx]

 

100="Continue"

 

101="Switching Protocols"

 

 

 

 

 

 

 

 

Αύξησε λίγο τα timeouts σου και κάνε ότι λέει πάνω. Authentication request είναι;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αυτό που κάνω είναι να στέλνω κάποια xml σε έναν άλλον server και μου γυρνάει μερικές φορές αυτά τα errors και δεν ξέρω ποιος φταίει. Εγώ; Αυτός; Ή και οι 2;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δοκίμασε ajax requests ή ακόμα jsonp αν επιστρέφει json(πολύ γρηγορότερη επεξεργασία, δε χρειάζεται schema validation, είναι μόνο text structure το json) o server. Αν επιμεινεις σε curl εφάρμοσε το debugging που λέει στη πρώτη παράθεση που έκανα. Βασικά μου φαίνεται ότι έχεις πολύ λίγο timeout και δε προλαβαίνει να επεξεργαστει το φόρτο ο σερβερ, μη ξεχνάς είναι cross domain request απαιτεί χρόνο.Βάλε 5000 timeout (5 δεύτερα) να δείς τι κάνει. Εγω σε self-domain request έβαζα 3-4 seconds(json αλλά με πολλά δεδομένα απο βάση) εσυ ίσως χρειαστεί να βάλεις κ αρκετά παραπάνω.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δοκίμασε ajax requests ή ακόμα jsonp αν επιστρέφει json(πολύ γρηγορότερη επεξεργασία, δε χρειάζεται schema validation, είναι μόνο text structure το json) o server. Αν επιμεινεις σε curl εφάρμοσε το debugging που λέει στη πρώτη παράθεση που έκανα. Βασικά μου φαίνεται ότι έχεις πολύ λίγο timeout και δε προλαβαίνει να επεξεργαστει το φόρτο ο σερβερ, μη ξεχνάς είναι cross domain request απαιτεί χρόνο.Βάλε 5000 timeout (5 δεύτερα) να δείς τι κάνει. Εγω σε self-domain request έβαζα 3-4 seconds(json αλλά με πολλά δεδομένα απο βάση) εσυ ίσως χρειαστεί να βάλεις κ αρκετά παραπάνω.

Όσον αφορά το timeout δεν είναι σε milliseconds αλλά σε δευτερόλεπτα. Επομένως έχω βάλει πάρα πολύ χρόνο.

 

Ίσως είναι μια λύση αυτό με τα ajax requests αλλά θα προτιμούσα κάτι σε PHP.

Στην αρχή είχα χρησιμοποιήσει HttpRequest αλλά είχα διάφορα θέματα και για αυτό χρησιμοποίησα μετά Curl αλλά πάλι βλέπω ότι υπάρχει πρόβλημα μάλλον με τον server που χτυπάω.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στο κώδικα σου βάλε

$header=array();

πριν το $header = curl_getinfo($ch);

και αντικατέστησε το

return $header;

με print_r($header);

κ πόσταρε εδώ τι βγάζει

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@mad-proffessor

σε ευχαριστώ για το ενδιαφέρον που δείχνεις.

 

Λοιπόν, επειδή είναι function χρησιμοποιώ μια μεταβλητή για να αποθηκεύσω ότι μου γυρνάει η function (ουσιαστικά αυτό που μου προτείνεις και εσύ). Έτσι, η μεταβλητή αυτή είναι πίνακας και κοιτάω εάν το http_code είναι με 200 τότε ΟΛΑ πήγαν μια χαρά αλλιώς γράφω σε log file το http_code και το errmsg που μου γύρισε.

 

Λάθη που έχω γράψει στο log file:

100 Operation timed out after 240000 milliseconds with 0 bytes received

100 Failure when receiving data from the peer

500 Operation timed out after 240000 milliseconds with 3044 out of 3044 bytes received

500

0 couldn't connect to host

100 Operation timed out after 240000 milliseconds with 0 bytes received

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τα λάθη είναι κ απο αυτόν κ απο εσένα:Π.χ 500(internal server error) φταίει αυτός, 100 φταίς εσύ μπορεί να φταίει το xml markup να μην είναι σωστό κτλ,0 error code δεν εγινε σωστα το request- σε κάθε περίπτωση αν δεν δώσεις παραπάνω πληροφορίες για τα url,request data δε μπορω να σου πω παραπάνω. Όπως και να έχει να ξέρεις είναι καλύτερα με ajax γιαυτό ακριβώς το λόγο επινοήθηκε να μην επιβαρύνεται ο σερβερ και να αναλαμβάνει η js.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν έχω να δώσω παραπάνω κώδικα. Χρησιμοποιώ την function που έδειξα παραπάνω για να στέλνω δεδομένα σε xml μορφή.

 

Τεσπα, ευχαριστώ για τον χρόνο σου.

 

Εάν κάποιος άλλος μπορεί να πει κάτι για αυτό το θέμα ίσως βοηθήσει ακόμα περισσότερο.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δοκίμασε με

fsockopen

fwrite

fgets

fclose

ίσως παίξει αν και εφόσον είχες προβλήματα με την http κλάση αμφιβάλλω αν θα έχεις καλύτερα αποτελέσματα με αυτες τις συναρτήσεις.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...