9
votes

CURL Connecter le délai d'attente ne fonctionne pas

J'utilise CURL pour vous connecter à plusieurs flux XML et les traiter lorsque la page se charge. Malheureusement, de temps en temps une page une page ne sera pas réactive et mon script va aussi bien. Voici un exemple du code que je travaille. Je fixe le délai d'attente à 1 mais cela ne semble pas fonctionner. J'ai ensuite défini le délai d'attente sur 0,0001 juste pour tester les choses aujourd'hui et il est toujours tiré dans les aliments XML. Est-ce que vous avez des idées sur la manière de forcer la boucle au délai d'attente lorsqu'un script prend pour toujours. xxx


0 commentaires

3 Réponses :


1
votes

Voir la différence entre Curlopt_ConnectTimeout et Curlopt_Timeout


1 commentaires

Désolé, mais cette réponse ne donne aucune information utile. Bien sûr, ce sont des options différentes et bien sûr, nous devons voir la différence :)



37
votes

Il y a deux fois différents avec CURL - voir curl_setopt Page de manuel : < / p>

curlopt_connecttimeout
Le nombre de quelques secondes pour attendre en essayant de relier. Utilisez 0 pour attendre indéfiniment.

et:

curlopt_timeout
Le nombre maximum de secondes pour autoriser les fonctions de courbure à Exécuter.

Ils ont tous les deux une version "milliseconde": curlopt_connecttimeout_ms et curlopt_timeout_ms , respectivement.


Dans votre cas, vous voudrez peut-être également configurer le second également: ce qui semble prendre le temps n'est pas la connexion, mais la construction de l'alimentation sur le côté serveur.


2 commentaires

Merci beaucoup cela était extrêmement utile. J'essaie de tester pour voir si cela fonctionne et de le faire, j'ai défini le délai d'attente sur 1 dans le code ci-dessous. Je mesure XMLS avec 50-100 éléments, donc j'imagine que cela prendrait plus qu'un milliseconde. Je m'attendais à ne recevoir aucun résultat mais à la place tout revint comme normal. curl_setopt ($ curl [$ k], curlopt_timeout_ms, 1); Est-ce que je manque quelque chose? Merci beaucoup pascal russ


vraiment bon exemple il y a Pascal



0
votes

J'utilise la bibliothèque CURL pour télécharger un fichier à partir d'Apache Server. TéléchargerFileWithCurary Fonction a deux entrées. Fileurl est le fichier téléchargera le serveur de formulaire. Exemple: www.abc.com/myfile.doc. LocFile est répertoire et nom de fichier que vous souhaitez enregistrer. Exemple: /Home/projectx/myfile.doc.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <curl/curl.h>

int downloadFileWithCurlLibrary(char *FileUrl,char *locFile)
{
    char dlFile[1024];
    CURL *curl_handle;
    FILE *pagefile;


    memset(dlFile,0x0,sizeof(dlFile));
    /* Create URL */

    sprintf(dlFile,"%s",FileUrl);

    curl_global_init(CURL_GLOBAL_ALL);

    /* init the curl session */
    curl_handle = curl_easy_init();

    /* Set timeout 3 min = 3*60 sec here. */
    curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, 1800 );

    /* set URL to get here */
    if (curl_easy_setopt(curl_handle, CURLOPT_URL, dlFile) != CURLE_OK)
        return -1;

    /* Switch on full protocol/debug output while testing */
    //  if (curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1L) != CURLE_OK)
    //    return -1;

    /* disable progress meter, set to 0L to enable and disable debug output */
    if (curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L) != CURLE_OK)
        return -1;

    /* send all data to this function  */
    if (curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data) != CURLE_OK)
        return -1;

    /* open the file */
    pagefile = fopen(locFile, "wb");
    if (pagefile)
    {

        /* write the page body to this file handle. CURLOPT_FILE is also known as
           CURLOPT_WRITEDATA*/
        if (curl_easy_setopt(curl_handle, CURLOPT_FILE, pagefile) != CURLE_OK)
            return -1;

        /* get it! */
        if (curl_easy_perform(curl_handle) != 0)
            return -1;

        /* close the header file */
        fclose(pagefile);
    }
    else
    {
        return -1;
    }

    /* cleanup curl stuff */
    curl_easy_cleanup(curl_handle);

    return 0;
}


3 commentaires

Vous recevrez probablement des votes si vous l'avez expliqué plus et que vous avez affirmé une démonstration des fonctions de rappel.


Lorsque le délai d'attente est survenu. Cette fonction retour -1.


1800S = 30 minutes