Pergunta

Preciso usar XmlRpc em C++ em uma plataforma Windows.Apesar de meus amigos me garantirem que o XmlRpc é uma "tecnologia padrão amplamente disponível", não existem muitas bibliotecas disponíveis para ele.Na verdade, encontrei apenas uma biblioteca para fazer isso no Windows (além de outra que afirma "você terá que trabalhar muito para compilar no Windows).A biblioteca que encontrei foi "XmlRpc++" de Chris Morley.No entanto, não tem suporte para SSL.

Minha pergunta, portanto, é:qual biblioteca devo usar?

Foi útil?

Solução

Eu escrevi minha própria biblioteca C++.Está disponível no sourceforge:xmlrpcc4win

A razão pela qual escrevi em vez de usar o de Chris Morley foi que:

  • A biblioteca "wininet.lib" do Windows oferece todas as funcionalidades para lidar com solicitações HTTP, então prefiro usá-la.Como resultado, precisei apenas de 1700 LOC.
  • "wininet.lib" e, portanto, minha implementação, suporta HTTPS
  • O uso de contêineres STL por Chris Morley foi bastante ineficiente (Chris, envie-me um e-mail se você ler isto).

Outras dicas

Até escrever minha própria biblioteca (veja acima), aqui estava minha resposta:

Atualmente, o Biblioteca XmlRpc++ por Chris Morley é a única implementação XmlRpc de domínio público/LPGL para C++ no Windows.

Existem algumas implementações de C++ para Linux, qualquer uma das quais poderia ser facilmente portada para o Windows, mas o fato parece ser que ninguém ainda o fez e o tornou disponível publicamente.Além disso, como diz eczamy, "A especificação XML-RPC é um tanto simples e não seria difícil implementar seu próprio cliente XML-RPC."

Estou usando a biblioteca de Chris Morley com sucesso, apesar de ter encontrado e corrigido vários bugs.O Fórum de Ajuda para este projeto parece estar um tanto ativo, mas ninguém corrigiu esses bugs e fez um novo lançamento.Estive em correspondência com Chris Morley e ele tem vagas esperanças de fazer um novo lançamento, e ele contribuiu para esta questão stackOverflow (veja abaixo/acima) e afirma ter corrigido a maioria dos bugs, mas até agora ele não o fez fez um lançamento que corrige muitos bugs.O último lançamento foi em 2003.

É decepcionante para mim que um protocolo supostamente amplamente suportado (e simples!) tenha um suporte tão fraco no Windows + C++.Por favor, alguém que esteja lendo esta página pode pegar o bastão e, por exemplo.assumir o controle do XmlRpc++ ou portar adequadamente uma das implementações do Linux.

Existem dezenas de implementações do XML-RPC implementações, alguns em C++, mas a maioria em outras linguagens.Por exemplo, além do XmlRpc++ também existe XML-RPC para C e C++.Aqui está um COMO sobre como a biblioteca XML-RPC para C e C++ pode ser usada.

A especificação XML-RPC é um tanto simples e não seria difícil implementar seu próprio cliente XML-RPC.Sem mencionar que também seria possível pegar uma implementação XML-RPC existente em C e trazê-la para o seu projeto C++.

O XML-RPC pagina inicial também fornece muitas informações úteis.

Só queria observar alguns itens:

  • A fonte no repositório cvs para XmlRpc++ tem suporte para OpenSSL (embora eu não tenha tentado, foi contribuído por outro desenvolvedor).

  • A maioria dos bugs relatados são corrigidos no cvs;Não tenho acesso a uma máquina Linux no momento, então não fiz um lançamento oficial.

  • XmlRpc++ não é de domínio público.É protegido por direitos autorais e licenciado (LGPL).

Obrigado Chris Morley

Consegui fazer com que a versão xml rpc do Tim funcionasse com https e com autenticação básica de nome de usuário/senha.

Para a autenticação:

1) o nome de usuário e a senha precisam ser passados ​​para a função InternetConnect(...)

2) um cabeçalho de solicitação http de "Autorização:Basic base64encoded(user:pass)" precisa ser adicionado antes de enviar o comando HttpSendRequest(...).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top