Uberalles_gr Δημοσ. 27 Φεβρουαρίου 2013 Δημοσ. 27 Φεβρουαρίου 2013 Καλημέρα σε όλη την κοινότητα, έχω μια 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 που χτυπάω;;
mad-proffessor Δημοσ. 27 Φεβρουαρίου 2013 Δημοσ. 27 Φεβρουαρίου 2013 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 είναι;
Uberalles_gr Δημοσ. 27 Φεβρουαρίου 2013 Μέλος Δημοσ. 27 Φεβρουαρίου 2013 Αυτό που κάνω είναι να στέλνω κάποια xml σε έναν άλλον server και μου γυρνάει μερικές φορές αυτά τα errors και δεν ξέρω ποιος φταίει. Εγώ; Αυτός; Ή και οι 2;
mad-proffessor Δημοσ. 27 Φεβρουαρίου 2013 Δημοσ. 27 Φεβρουαρίου 2013 Δοκίμασε 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 αλλά με πολλά δεδομένα απο βάση) εσυ ίσως χρειαστεί να βάλεις κ αρκετά παραπάνω. 1
Uberalles_gr Δημοσ. 27 Φεβρουαρίου 2013 Μέλος Δημοσ. 27 Φεβρουαρίου 2013 Δοκίμασε 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 που χτυπάω.
mad-proffessor Δημοσ. 27 Φεβρουαρίου 2013 Δημοσ. 27 Φεβρουαρίου 2013 Στο κώδικα σου βάλε $header=array(); πριν το $header = curl_getinfo($ch); και αντικατέστησε το return $header; με print_r($header); κ πόσταρε εδώ τι βγάζει
Uberalles_gr Δημοσ. 27 Φεβρουαρίου 2013 Μέλος Δημοσ. 27 Φεβρουαρίου 2013 @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
mad-proffessor Δημοσ. 27 Φεβρουαρίου 2013 Δημοσ. 27 Φεβρουαρίου 2013 Τα λάθη είναι κ απο αυτόν κ απο εσένα:Π.χ 500(internal server error) φταίει αυτός, 100 φταίς εσύ μπορεί να φταίει το xml markup να μην είναι σωστό κτλ,0 error code δεν εγινε σωστα το request- σε κάθε περίπτωση αν δεν δώσεις παραπάνω πληροφορίες για τα url,request data δε μπορω να σου πω παραπάνω. Όπως και να έχει να ξέρεις είναι καλύτερα με ajax γιαυτό ακριβώς το λόγο επινοήθηκε να μην επιβαρύνεται ο σερβερ και να αναλαμβάνει η js.
Uberalles_gr Δημοσ. 27 Φεβρουαρίου 2013 Μέλος Δημοσ. 27 Φεβρουαρίου 2013 Δεν έχω να δώσω παραπάνω κώδικα. Χρησιμοποιώ την function που έδειξα παραπάνω για να στέλνω δεδομένα σε xml μορφή. Τεσπα, ευχαριστώ για τον χρόνο σου. Εάν κάποιος άλλος μπορεί να πει κάτι για αυτό το θέμα ίσως βοηθήσει ακόμα περισσότερο.
Uberalles_gr Δημοσ. 28 Φεβρουαρίου 2013 Μέλος Δημοσ. 28 Φεβρουαρίου 2013 Υπάρχει κάποια άλλη πρόταση/ιδέα παίδες; Κάτι που να χρησιμοποιείται πιο ευρέως για την δουλειά που θέλω να κάνω;
mad-proffessor Δημοσ. 28 Φεβρουαρίου 2013 Δημοσ. 28 Φεβρουαρίου 2013 Δοκίμασε με fsockopen fwrite fgets fclose ίσως παίξει αν και εφόσον είχες προβλήματα με την http κλάση αμφιβάλλω αν θα έχεις καλύτερα αποτελέσματα με αυτες τις συναρτήσεις.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα