簡體   English   中英

libcurl POST-CURLOPT_READFUNCTION和CURLOPT_WRITEFUNCTION用於發布XML

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM