Я пытаюсь отправить данные в Apache, который работает на localhost. Данные правильно формируется в формате JSON, но, когда я отправить данные с помощью Libcurl и на PHP веб-сервер повторил я из строки с помощьюC++ libcurl отправка неверных данных
echo file_get_contents("php://input");
Это возвращают случайные символы, это данные, которые сервер вторит из
`é ²²²²▌▌▌▌4Ég\▌ îHGáF
и в C++, когда я эхо из json, он печатает правильно.
Request.C++
void Request::execute() {
auto curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, mUrl);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_USERAGENT, "RoBot/ Version 1");
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 50L);
curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &mResponse);
curl_easy_setopt(curl, CURLOPT_HEADERDATA, &mHeaders);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &mResponseCode);
if (!mData.empty()) {
curl_easy_setopt(curl, CURLOPT_POST, true);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, mData);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, mData.size());
}
if (mHeadersData) {
curl_easy_setopt(curl, CURLOPT_HEADER, true);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, mHeadersData);
}
curl_easy_perform(curl);
curl_easy_cleanup(curl);
curl_slist_free_all(mHeadersData);
curl = nullptr;
}
И это, как я его выполнения.
json data;
data["username"] = username;
data["password"] = password;
std::cout << data.dump() << std::endl;
//Request* request = new Request("https://www.roblox.com/MobileAPI/Login");
Request* request = new Request("http://localhost:8080/Projects/");
request->setPostData(data.dump());
//request->addHeader("Content-Type: application/json");
request->execute();
std::cout << request->getResponse() << std::endl;
std::cout << request->getHeaders() << std::endl;
Это то, что получить выводится на консоль
Username: id
Password: kf
{"password":"kf","username":"id"}
`é ²²²²▌▌▌▌4Ég\▌ îHGáF
HTTP/1.1 200 OK
Date: Sat, 27 Aug 2016 09:15:07 GMT
Server: Apache/2.4.6 (Win32) PHP/5.4.17
X-Powered-By: PHP/5.4.17
Content-Length: 36
Content-Type: text/html
Любые идеи, почему?
[Изменено]
Функция записи показано ниже
size_t write(void *ptr, size_t size, size_t nmemb, std::string* data) {
data->append((char*)ptr, size * nmemb);
return size * nmemb;
}
Я устанавливаю данные делать, как следовать
void Request::setPostData(std::string data) {
mData = data;
}
[РЕДАКТИРОВАНИЕ 2]
Так что я теперь знаю проблему, очевидно, libcurl принимает только char *, и я отправляю std :: string. Есть ли какой-то путь вокруг этого, так как моя библиотека json конвертирует json-объект в std :: string?
Мне кажется, что у вас есть неисчерпаемая строка стиля C. Пожалуйста, покажите нам функции 'setPostData' и' write'. –
Этого недостает всего несколько бит информации. Что такое 'write()' (потому что libc 'write()' имеет совсем другую подпись, чем функция записи curl)? Что такое 'mData'? 'curl_easy_setopt()' является функцией varargs, поэтому преобразование типа кажется обязательным. – dhke
Хорошо, я обновил его с дополнительной информацией в соответствии с запросом. – Kurieita