Как я могу прочитать тело запроса POST в пользовательском модуле apache? - PullRequest
0 голосов
/ 23 сентября 2019

Я разрабатываю модуль Apache, в котором мне нужно прочитать все тело запроса, чтобы сосчитать все содержащиеся в нем байты.

Я мог бы использовать заголовок «Content-Length», но пока онотправленные на стороне клиента данные, я не доверяю этим данным.

Я обнаружил, что этот код читает тело и возвращает длину тела:

    static size_t get_post_body_length(request_record *request, char **buffer) {                                                                                                                                 
  int rc;                                                                                                                                                                                                    

  if ((rc = ap_setup_client_block(request, REQUEST_CHUNKED_ERROR)) != OK) {                                                                                                                                  
    return rc;                                                                                                                                                                                               
  }                                                                                                                                                                                                          

  size_t rpos = 0;                                                                                                                                                                                           
  if (ap_should_client_block(request)) {                                                                                                                                                                     
    int len_read;                                                                                                                                                                                            

    while ((len_read = ap_get_client_block(request, *buffer, 4096)) > 0) {                                                                                                                                   
      rpos += len_read;                                                                                                                                                                                      
    }                                                                                                                                                                                                        
  }                                                                                                                                                                                                          
  return rpos;                                                                                                                                                                                               
}

Фактически, после запросатело было прочитано, у меня есть длина тела, но указатель перемещен, и тело теперь пусто, но char **buffer содержит содержимое тела.Я пытался повторно внедрить этот буфер в теле запроса, но я не могу понять, как.

Я не хочу, чтобы он был пустым, так как запрос POST должен быть перенаправлен без изменений.

Я обнаружил некоторые поля в структуре данных request_rec, которые могли бы содержать количество байтов, но все они равны 0, поскольку тело никогда не читалось apache.

Я также пытался изменить ap_get_client_block()функция из исходного кода Apache https, чтобы попытаться имитировать эту функцию, чтобы не потерять указатель, но также не работает.

Как я могу прочитать это тело и сохранить его в моем request_rec?Или переустановить это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...