Rest SDK - Разместить запрос 404 - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь сделать POST-запрос к API Graphhopper (https://graphhopper.com), используя Rest SDK (https://github.com/microsoft/cpprestsdk), но получен ответ 404. Я полагаю, что при настройке мне не хватает некоторых деталей)up my post_data. json - это в основном два массива координат и некоторые дополнительные поля. Код выглядит так:

using namespace web;
int total_locals = 4;
std::string* lat_longs = new std::string[4];
lat_longs[0] = "-22.886805,-43.282360";
lat_longs[1] = "-22.886805,-43.282360";
lat_longs[2] = "-22.886805,-43.282360";
lat_longs[3] = "-22.900555,-43.277941";

json::value post_data;
post_data[U("from_points")] = json::value::array();
post_data[U("to_points")] = json::value::array();
double lat,longi;
std::string token;
for(int l1 = 0; l1 < total_locals; ++l1){
    std::istringstream ss(lat_longs[l1]);
    std::getline(ss, token, ','); lat = stod(token);
    std::getline(ss, token, ','); longi = stod(token);
    post_data[U("from_points")][l1] = json::value::array();
    post_data[U("from_points")][l1][0] = json::value::number(longi);
    post_data[U("from_points")][l1][1] = json::value::number(lat);
}
for(int l = 0; l < num_locals; ++l){
    std::istringstream ss(lat_longs[locals[l]]);
    std::getline(ss, token, ',');
    lat = stod(token);
    std::getline(ss, token, ',');
    longi = stod(token);
    post_data[U("to_points")][l] = json::value::array();
    post_data[U("to_points")][l][0] = json::value::number(longi);
    post_data[U("to_points")][l][1] = json::value::number(lat);
}
post_data[U("out_arrays")] = json::value::array();
post_data[U("out_arrays")][0] = json::value(U("times"));
post_data[U("vehicle")] = json::value(U("car"));

http::client::http_client gh(U("https://graphhopper.com/api/1/matrix?key="+GH_KEY));

http::http_request req = http::http_request(http::methods::POST);
req.set_request_uri(gh.base_uri());
req.set_body(post_data);

std::cout << req.to_string() << "\n";

auto response = gh.request(req).get();

json::value resp_data = response.extract_json().get();
std::cout << "Status: " << response.status_code() << "\n";
std::cout << "Response: " << resp_data.serialize() << "";

delete[] lat_longs;

Когда я использую curl для выполнения запроса с использованием вывода req.to_string()метод дает правильные результаты (хотя мне нужно экранировать кавычки в строке json). Я попытался задать тело запроса с сериализованными post_data и указать тип контента как application / json, но получил то же самоеКод 404. Есть ли какие-либо дополнительные шаги, чтобы сделать эту работу?

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