Как передать не XML-данные в заголовке в gsoap C++ от клиента?
Я использую библиотеку gsoap C++, чтобы сделать вызов веб-службы Java.
Я могу передать файл json, вызвав json_call, но я хочу добавить информацию заголовка. Для этого я изменил структуру SOAP_ENV__Header как:
struct ns3__Header {
char *username;
char* password; };
struct SOAP_ENV__Header {
#ifdef WITH_NOEMPTYSTRUCT
char dummy;
#endif
struct ns3__Header *ns3__MyHeader;
};
Теперь я могу добавить значения в заголовок, но моя проблема в том, что они добавляются в формате xml в заголовок. Но я хочу просто тег: значение формата. Как этого добиться?
Когда я передаю заголовок, он выглядит так:
<?xml version="1.0" encoding="UTF-8"?> <username id="_300"> <ns3:MyHeader>
in soap_out_SOAP_ENV__Header
</ns3:MyHeader> </username> { "add": { "i": 10, "j": 20,
} }
Но это должно выглядеть так:
username:xyz
password:abcd
...
...
{
"add":
{
"i": 10,
"j": 20,
}
}
2 ответа
Soap_Env_header отправляет по умолчанию xml, его невозможно вставить в json, попробуйте другую библиотеку, надеюсь, cpprest (Касабланка)
Наконец я нашел решение для передачи информации заголовка в вызове отдыха в C++ gsoap -
#include "json.h"
#include <string.h>
#include "jsonStub.h"
struct Namespace namespaces[] = { {NULL, NULL} };
int main()
{
struct soap *ctx = soap_new1(SOAP_XML_NOTYPE);
soap_init(ctx);
struct value *request = new_value(ctx);
struct value response;
ctx->sendfd = 1;
ctx->http_extra_header = "userName:abcd\r\npassword:xyz";
*string_of(value_at(value_at(request, "add"), "i")) = "10";
*string_of(value_at(value_at(request, "add"), "j")) = "20";
json_write(ctx, request);
printf("\n");
if (json_call(ctx, "endpoint",request, &response))
{
printf( "json call failed " );
soap_print_fault(ctx, stderr);
printf("\n%d", ctx->error);
printf("\n1: SOAP faultcode = %s\n", *soap_faultcode(ctx));
printf("2: SOAP faultstring = %s\n", *soap_faultstring(ctx));
printf("3: SOAP faultdetail = %s\n\n", *soap_faultdetail(ctx));
soap_print_fault_location(ctx, stderr);
}
else
{
printf("Success !!!");
json_write(ctx, &response);
}
soap_destroy(ctx);
soap_end(ctx);
soap_free(ctx);
return 0;
}