Потоковое тело запроса клиента с помощью libevent evhttp?

Я хотел бы передать тело запроса POST клиента с помощью libevent и evhttp. Я нашел примеры отправки запросов с фиксированными телами, но не знаю, как настроить запрос с телом, которое мне нужно будет постоянно писать и обновлять в течение неопределенного периода времени. Возможно ли это сделать с помощью libevent? Мой текущий базовый код выглядит примерно так:

#include <evhttp.h>
#include <event2/event.h>
#include <event2/http.h>

void http_request_done(struct evhttp_request *req, void *arg) {
  printf("DONE!\n");
}

int main(int argc, char **argv) {
  struct event_base *base = event_base_new();
  struct evhttp_connection *conn = evhttp_connection_base_new(base, NULL, "127.0.0.1", 3000);
  struct evhttp_request *req = evhttp_request_new(http_request_done, NULL);

  evhttp_make_request(conn, req, EVHTTP_REQ_POST, "/");
  evhttp_connection_set_timeout(req->evcon, 600);
  event_base_loop(base, EVLOOP_NONBLOCK);
  event_base_dispatch(base);

  return 0;
}

Как мне отправить запрос POST с потоковым телом?


person Mark Fine    schedule 03.03.2017    source источник


Ответы (1)


В LibEvent для этого предусмотрены фрагментированные функции. Вы можете увидеть примеры кода подобные этому и этот

Мы можем видеть в документации эти функции - chunk() в цикле между start()/end():`

evhttp_send_reply_start(структура evhttp_request *req)

evhttp_send_reply_chunk(struct evhttp_request *req, struct evbuffer *databuf)

evhttp_send_reply_end(struct evhttp_request *req)`.

Они предназначены для отправки, и если вам нужно получить входящие фрагментированные данные, есть evhttp_request_set_chunked_cb()

person Eluny    schedule 14.02.2018