The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.
Other
7.91k
stars
1.64k
forks
source link
http_request returns empty string for JSON data #1713
I call the following function with a string (input webCall) that requests earnings data for a particular stock. I can send a request that asks for the 4 prior reports and that works correctly. When I increase the request to want 5 or more prior reports the data that is returned in an empty string and the status code is ok (200). I have done the same request using a command line CURL command and it works so I know that the server I am requesting the data from is capable of returning whatever length of data I am requesting. Therefore, I am assuming I have not configured something correctly and the return value is getting rejected for some type of size limitation issue. I am very to new to using the the cpprestsdk so I am thinking my lack of knowledge on how to configure things is the issue, but I don't know what to do! FYI, I have not included the exact https request since it has an api_key code that I had to pay for. The code is as follows:
// Creates an HTTP request and prints the length of the response stream.
pplx::task HTTPStreamingAsync(std::string& returnString, int& returnCode, std::string webCall)
{
returnString = "";
const size_t newSize = 1000;
wchar_t wcstring[newSize];
size_t convertedChars = 0;
mbstowcs_s(&convertedChars, wcstring, newSize, webCall.c_str(), _TRUNCATE);
// Declare webservice to consume json data from it
http_client client(wcstring);
//Set parameters for request
http_request req(methods::GET);
req.headers().set_content_type(L"application/json");
//req.headers().set_content_type(L"application/json; charset=UTF-8");
// Make the request and asynchronously process the response.
return client.request(req).then([&returnString, &returnCode](http_response response)
{
// Print the status code.
returnCode = response.status_code();
if (response.status_code() != status_codes::OK)
{
returnString = "";
return pplx::task_from_result();
}
// process the response.
istream bodyStream = response.body();
unsigned int responseLength = (unsigned int)response.headers().content_length();
std::cout << "response.status_code()=" << response.status_code() << "\n";
std::cout << "responseLength=" << responseLength << "\n";
container_buffer<std::string> inStringBuffer;
return bodyStream.read(inStringBuffer, responseLength).then([inStringBuffer, &returnString](size_t bytesRead)
{
const std::string& text = inStringBuffer.collection();
//std::cout << text + "\n";
returnString = text;
});
});
}
Also, just to know, the request is for JSON data and I just want to get the raw string and I will parse it using a JSON parser that I have already built.
Any help or suggestions would be greatly appreciated!
I call the following function with a string (input webCall) that requests earnings data for a particular stock. I can send a request that asks for the 4 prior reports and that works correctly. When I increase the request to want 5 or more prior reports the data that is returned in an empty string and the status code is ok (200). I have done the same request using a command line CURL command and it works so I know that the server I am requesting the data from is capable of returning whatever length of data I am requesting. Therefore, I am assuming I have not configured something correctly and the return value is getting rejected for some type of size limitation issue. I am very to new to using the the cpprestsdk so I am thinking my lack of knowledge on how to configure things is the issue, but I don't know what to do! FYI, I have not included the exact https request since it has an api_key code that I had to pay for. The code is as follows:
// Creates an HTTP request and prints the length of the response stream. pplx::task HTTPStreamingAsync(std::string& returnString, int& returnCode, std::string webCall)
{
returnString = "";
}
Also, just to know, the request is for JSON data and I just want to get the raw string and I will parse it using a JSON parser that I have already built.
Any help or suggestions would be greatly appreciated!