How to post raw JSON Data in Webservices (JAVA, C++) | Techbirds
Hi All,
As we all know there are various ways of passing data in request of a web-service. Here I am going to discuss how I did for sending raw json data using post method.
You need to consider two important aspects of Request Header of request:-
Content-Type :-The MIME type of the body of the request e.g. “application/json”
Content-Length:-The length of the request body ( length of the raw json data in terms of number of characters).
JAVA
String targetURL = “https://jsondatatest.com”; //Your webservice URL
String urlParameters = “{ \”email\”: \”[email protected]\”, \”password\”: \”test123\”}”; // Your JSON raw data
URL url = new URL(targetURL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //Creating connection object
connection.setRequestMethod(“POST”); //Way of submitting data(e.g. GET, POST)
connection.setRequestProperty(“Content-Type”, “application/json”); //Setting content type- JSON
//Setting length of the request body
connection.setRequestProperty(“Content-Length”, Integer.toString(urlParameters.getBytes().length));
//set it to true if you want to send input in the request body
connection.setDoInput(true);
//set it to true if you want to send outputin the request body
connection.setDoOutput(true);
//Sending raw json data in the request body
DataOutputStream dataoutput = new DataOutputStream(connection.getOutputStream()); dataoutput .write(urlParameters.getBytes(“UTF-8″));
dataoutput .flush();
//Retrieving response from the webservice BufferedReader bufferResponse = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; StringBuffer response = new StringBuffer(); while ((line = bufferResponse .readLine()) != null) { response.append(line); response.append(‘\r’);
}
//Process your response as needed
process(response);
//Freeing resources
bufferResponse .close();
*********************************************************************************************************************
C++ (Used Qt framework )
//QNetworkAccessManager – Receives network requests, and sends them over the network using one of its HTTP request functions
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QByteArray dataByteArray(“{ \”email\”: \”[email protected]\”, \”password\”: \”test123\”}”); // Your JSON raw data
QUrl url(“https://jsondatatest.com”); //Your webservice URL
QNetworkRequest request(url);
QByteArray postDataSize = QByteArray::number(dataByteArray.size());
request.setRawHeader(“User-Agent”, “ApplicationNameV01″);
request.setRawHeader(“Content-Type”, “application/json”);
request.setRawHeader(“Content-Length”, postDataSize);
if (manager) {
bool result;
//Used QEventLoop to make the webservice call synchronous, if you want it to be asynchronous avoid it. QEventLoop loop;
QNetworkReply *reply = manager->post(request, dataByteArray);
/* The finished() signal is triggered once an HTTP request is complete, by connect method we are connecting finished signal with the slot method onRequestFinished(user defined method). If it returns true it means connection is successful else not. You can process the response of the call in this user defined method */
result = connect(manager, SIGNAL(finished(QNetworkReply*)), this,SLOT(onRequestFinished(QNetworkReply*)));
loop.exec();
qDebug()