Я использую библиотеку api rest C ++ pastiche для создания API остальных в Ubuntu Linux.У меня сервер работает без проблем.Я могу использовать php curl для публикации данных на моем сервере.Сервер получает данные и может вернуть данные.Проблема в этом.Когда я отправляю сообщение на сервер с сообщением curl, оно отправляет его на сервер в виде строки в кодировке URL, например name=percy&age=34&eye_color=blue
.Мне нужно знать, как в C ++ поместить каждый в строку.Также одно из полей может также иметь двоичные данные, а также обычные строки.Я уже написал код для интерпретации двоичных данных, но в настоящее время я не знаю, как преобразовать строку из сообщения curl.Пожалуйста, игнорируйте тот факт, что мой порт отличается в моем php.Причина в том, что я запускаю Ubuntu в virtualbox.
Мне нужно извлечь строки и двоичные данные из сообщения, которое я отправляю.Это то, что я не знаю, как это сделать.Я не уверен, что мне может понадобиться другая библиотека для этого или нет
Вот мой php-код: -
$postData = http_build_query(
array(
'dstdata' => 'hello',
'more' => 'test',
'age' => 34
)
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'localhost:9999/about');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
print_r($output);
curl_close($ch);
Приведенный выше код может создать такую строку dstdata=hello&more=test&age=34
А вот код сервера c ++.Вы можете видеть, что у меня есть два настроенных маршрута здесь: -
#include <pistache/router.h>
#include "pistache/endpoint.h"
#include "pistache/http.h"
#include <iostream>
using namespace Pistache;
using namespace Rest;
Rest::Router router;
void sausage(const Rest::Request& request, Http::ResponseWriter response){
std::cout << "We have contact" << std::endl;
response.send(Http::Code::Ok, "Bottoms Up\n");
}
void about(const Rest::Request& request, Http::ResponseWriter response){
std::cout << "Server Running" << std::endl;
response.send(Http::Code::Ok, request.body());
}
int main(){
Routes::Get(router,"/ready",Routes::bind(&sausage));
Routes::Post(router,"/about",Routes::bind(&about));
Pistache::Address addr(Pistache::Ipv4::any(), Pistache::Port(9080));
auto opts = Pistache::Http::Endpoint::options()
.threads(10).flags(
Pistache::Tcp::Options::ReuseAddr);
Http::Endpoint server(addr);
server.init(opts);
server.setHandler(router.handler());
server.serve();
return 0;
}