我正在尝试使用libcurl将XML数据发布到一种Web服务。我正在使用tinyxml来创建一个xml文档,我希望能够使用curl对其进行POST,并使用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;
}
}
感谢您的协助。
答案 0 :(得分:3)
请改为尝试:
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;
}