Προς το περιεχόμενο
  • 0
Συνδεθείτε  
Uberalles_gr

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

Ερώτηση

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

 

έχω μια 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 που χτυπάω;;

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

10 απαντήσεις σε αυτή την ερώτηση

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

  • 0

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 είναι;

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Δοκίμασε 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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Δοκίμασε 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 που χτυπάω.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

$header=array();

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

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

return $header;

με print_r($header);

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

@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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

 

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

 

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Υπάρχει κάποια άλλη πρόταση/ιδέα παίδες;

 

Κάτι που να χρησιμοποιείται πιο ευρέως για την δουλειά που θέλω να κάνω;

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Δοκίμασε με

fsockopen

fwrite

fgets

fclose

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

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

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

Χρήσιμες πληροφορίες

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.