[C] curl response werkt sporadisch niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • honda4life
  • Registratie: Januari 2007
  • Laatst online: 02-07 21:01
Hallo iedereen,

Ik ben mij aan het vermaken met wat programmeerwerk, vermits ik een echte amateur ben, kom ik soms wel eens in de problemen waarbij ik wat hulp moet vragen.
Zoals je ziet in het vereenvoudigde voorbeeld zie je dat ik data opvraag via curl.
Het probleem dat zich voordoet is dat soms de response de mist in gaat, en ik deze data niet kan verwerken.
Wat mij opvalt is dat de callback functie meermaals opgeroepen wordt alvorens het de mist in gaat, volgende request kan alles dan weer zijn zoals het hoort.
Wie kan me wat goede raad geven waar ik moet beginnen zoeken of waarom het mis gaat.


Bedankt iedereen!


C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
int GetStatus(...)
{
    CURL *curl;
    CURLcode res = CURLE_OK;
    long responsecode = 0;
    char *response = NULL;

    curl = curl_easy_init();
    if(curl){
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
        curl_easy_setopt(curl, CURLOPT_POST, 1);
        curl_easy_setopt(curl, CURLOPT_URL, "http://pvoutput.org/service/r2/getstatus.jsp");
        //Get response from curl to *response
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback_func);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        while(...){
            ...
            snprintf(body, sizeof(body), "d=%s&h=1&asc=1&limit=288", ...);
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body);
            res = curl_easy_perform(curl);

            //Upload OK?
            if (res != CURLE_OK){
                printf("curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
                return -1;
            }
            else{
                curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &responsecode);
                printf("responsecode: %li\n", responsecode);
                printf("response: %s\nfrom body: %s\n", response, body);
                if (responsecode == 200){
                ...
                }
                else if (responsecode == 400){
                ...
                }
                else if (responsecode == 403){
                ...
                }
                //Uknown response
                else{
                    printf("Unknown response: %lu\tresponse: %s\n", responsecode, response);
                }
            }//Upload OK
        }//While loop
        //Clean up curl
        curl_easy_cleanup(curl);
    }
    //Clean up curl completely
    curl_global_cleanup();
    return 1;
}

size_t write_callback_func(char *buffer, size_t size, size_t nmemb, void *userp)
{
    puts("write_callback_func()");
    char **response_ptr = (char**)userp;
    *response_ptr = strndup(buffer, (size_t)(size *nmemb));
    return size * nmemb;
}

Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Request je altijd de URL die in je code staat, of is dat een voorbeeld?
honda4life schreef op donderdag 14 maart 2013 @ 20:51:
Het probleem dat zich voordoet is dat soms de response de mist in gaat
Wat gebeurt er dan?
, en ik deze data niet kan verwerken.
Hoe ziet die data er dan goed vs fout uit?
Wat mij opvalt is dat de callback functie meermaals opgeroepen wordt
Met welke parameters?

Acties:
  • 0 Henk 'm!

  • honda4life
  • Registratie: Januari 2007
  • Laatst online: 02-07 21:01
Sorry

Hier mag een slotje op, toch bedankt voor de moeite.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Een slotje is niet nodig op een topic als je je oplossing hebt. Zie daarvoor ook onze faq betreffende topiceinde. Het wordt echter wel op prijs gesteld als je even vermeldt wat het nu was / hoe je 't nu hebt opgelost voor mensen die in de toekomst middels de search / Google / whatever op je topic stuiten, Zie ook hier ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij