![](/img/trans.png)
[英]Pass extra arguments to libcurl CURLOPT_READFUNCTION callback
[英]libcurl POST - CURLOPT_READFUNCTION & CURLOPT_WRITEFUNCTION for posting XML
我正在嘗試使用libcurl將XML數據發布到某種Web服務。 我正在使用tinyxml創建xml文檔,並且我希望能夠使用curl進行發布並使用tinyxml解析XML響應。 我已經搜索了stackoverflow,但是沒有一個現有問題符合我的情況。
我無法弄清楚如何從tinyxml打印機/ std :: string轉到libcurl進行POST,然后將響應接收到內存中,以便稍后由tinyxml庫打開。
我幾乎可以使用以下代碼,但是我經常收到未處理的異常,這可能是由於指針所致。
typedef struct{
void *data;
int body_size;
int bytes_remaining;
int bytes_written;
} postdata;
size_t readfunc(void *ptr, size_t size, size_t nmemb, void *stream) {
if(stream) {
postdata *ud = (postdata*)stream;
if(ud->bytes_remaining) {
if(ud->body_size > size*nmemb) {
memcpy(ptr, ud->data+ud->bytes_written, size*nmemb);
ud->bytes_written+=size+nmemb;
ud->bytes_remaining = ud->body_size-size*nmemb;
return size*nmemb;
} else {
memcpy(ptr, ud->data+ud->bytes_written, ud->bytes_remaining);
ud->bytes_remaining=0;
return 0;
}
}
謝謝您的幫助。
嘗試以下方法:
typedef struct
{
void *data;
int body_size;
int body_pos;
} postdata;
size_t readfunc(void *ptr, size_t size, size_t nmemb, void *stream)
{
if (stream)
{
postdata *ud = (postdata*) stream;
int available = (ud->body_size - ud->body_pos);
if (available > 0)
{
int written = min(size * nmemb, available);
memcpy(ptr, ((char*)(ud->data)) + ud->body_pos, written);
ud->body_pos += written;
return written;
}
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.