Как использовать функцию ne_add_auth из библиотеки libneon
Пытаюсь реализовать с помощью библиотеки libneon подключение к серверу, использующему базовую аутентификацию. При ручном формировании заголовка Authorization все работает. Но если я пытаюсь использовать функцию ne_add_auth, то авторизация не проходит. Получаю код 401.
#include<neon/ne_request.h>
#include<neon/ne_auth.h>
#include <iostream>
#include <fstream>
#include <cstring>
std::ofstream file{"data.txt"};
#define SHOW_STR(str) (str==nullptr ? "NULL" : str)
//----------------------------------------------------------------------------
int my_auth_verify(void *, int attempt, unsigned protocol, const char *realm,
char *username, char* password, size_t)
{
strcpy(username, "admin");
strcpy(password, "123");
std::cout << "attempt: " << attempt << "; protocol: " << protocol <<
SHOW_STR(realm) << "; username: " << SHOW_STR(username) <<
"; password: " << SHOW_STR(password) << std::endl;
return 0;
}
//-----------------------------------------------------------------------------
void make_request(const char *request, const char *method, const char *path)
{
file << "-------------------------------------------------------------"<< std::endl;
ne_uri parsed_uri;
if(ne_uri_parse(request, &parsed_uri))
{
std::cout << "ne_uri_parse failed" << std::endl;
return;
}
auto sess = ne_session_create(parsed_uri.scheme, parsed_uri.host, parsed_uri.port);
ne_add_auth(sess, NE_AUTH_BASIC, my_auth_verify, nullptr);
auto req = ne_request_create(sess, method, path);
//So work:
//ne_add_request_header(req, "Authorization", "Basic YWRtaW46MTIz");
ne_begin_request(req);
file << "Code is " << ne_get_status(req)->code << std::endl;
char buffer[128] = "";
auto size = ne_read_response_block(req, buffer, 127);
while(size > 0)
{
file << std::string{buffer, size};
size = ne_read_response_block(req, buffer, 127);
}
ne_end_request(req);
ne_request_destroy(req);
ne_session_destroy(sess);
}
//-----------------------------------------------------------------------------
int main()
{
ne_sock_init();
make_request("http://127.0.0.1:8080", "GET", "/");
ne_sock_exit();
std::cout << "finish" << std::endl;
return 0;
}
Судя по выводу callback my_auth_verify вызывается 1 раз.
Можно конечно и вручную формировать заголовок. Но хотелось бы понять, как это должно работать с иcпользованием ne_add_auth (или ее аналога, допускаю, что использую не ту функцию).