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!
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; } |