libevent 上传文件



print_log("evhttp_connection_get_bufferevent() ok\n");


// Fire off the request
req = evhttp_request_new(http_post_done, bev);
if (req == NULL) {
fprintf(stderr, "evhttp_request_new() failed\n");
goto error;
}




char tmp_buf[256] = { 0 };


output_headers = evhttp_request_get_output_headers(req);
evhttp_add_header(output_headers, "Host", host);
evhttp_add_header(output_headers, "Connection", "keep-alive");



print_log("%s", data_file);

FILE * f = fopen(data_file, "rb");
char buf[1024];
size_t s;
size_t bytes = 0;


if (!f) {
syntax_();
goto error;
}


output_buffer = evhttp_request_get_output_buffer(req);


char head_buf[256];
int tmplen = strlen("------WebKitFormBoundaryAnNdXIAa997m6AMZ\r\n");
evbuffer_add(output_buffer, "------WebKitFormBoundaryAnNdXIAa997m6AMZ\r\n", strlen("------WebKitFormBoundaryAnNdXIAa997m6AMZ\r\n"));


sprintf(head_buf, "Content-Disposition: form-data; name=\"file\"; filename=\"%s\"\r\n", _filename);
tmplen += strlen(head_buf);
evbuffer_add(output_buffer, head_buf, strlen(head_buf));

sprintf(head_buf, "Content-Type: application/octet-stream\r\n\r\n");
tmplen += strlen(head_buf);
evbuffer_add(output_buffer, head_buf, strlen(head_buf));


while ((s = fread(buf, 1, sizeof(buf), f)) > 0) {
evbuffer_add(output_buffer, buf, s);
bytes += s;
}


sprintf(head_buf, "\r\n------WebKitFormBoundaryAnNdXIAa997m6AMZ--\r\n");
tmplen += strlen(head_buf);
evbuffer_add(output_buffer, head_buf, strlen(head_buf));


evutil_snprintf(buf, sizeof(buf)-1, "%lu", (unsigned long)bytes + tmplen);
evhttp_add_header(output_headers, "Content-Length", buf);


evhttp_add_header(output_headers, "Cache - Control", "max - age = 0");


//sprintf(tmp_buf, "http://%s", host);
//evhttp_add_header(output_headers, "Origin", tmp_buf);


//evhttp_add_header(output_headers, "Origin", "null");
evhttp_add_header(output_headers, "Upgrade - Insecure - Requests", "1");
//evhttp_add_header(output_headers, "User - Agent", "Mozilla / 5.0 (Windows NT 6.1; Win64; x64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 56.0.2924.87 Safari / 537.36");




sprintf(tmp_buf, "multipart/form-data;boundary=%s", "----WebKitFormBoundaryAnNdXIAa997m6AMZ");
evhttp_add_header(output_headers, "Content-Type", tmp_buf);
evhttp_add_header(output_headers, "Accept", "text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, */*;q=0.8");
evhttp_add_header(output_headers, "Accept-Encoding", "gzip, deflate, br");
evhttp_add_header(output_headers, "Accept-Language", "zh-CN,zh;q=0.8");






fclose(f);






r = evhttp_make_request(evcon, req, EVHTTP_REQ_POST, uri);
if (r != 0) {
fprintf(stderr, "evhttp_make_request() failed\n");
goto error;
}


event_base_dispatch(base);
goto cleanup;


error:
ret = 1;
cleanup:
if (evcon)
evhttp_connection_free(evcon);
if (http_uri)
evhttp_uri_free(http_uri);
event_base_free(base);


return ret;
}


#endif
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值