Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
11 years, 1 month ago.
Help for use Post Method
hello, I want to use your library with the POST method to call a remote rpc server, can you make an example the body of the request is as follows: "{\" method \ ": \" MyMethod \ ", \" params \ ": [0] \" id \ ": 1}", thank you in advance for your help I am noob
Question relating to:
1 Answer
11 years, 1 month ago.
Hello,
HTTP post is maybe this example. I have not check this sample completely.
int main()
{
net=new Net();//Net constructor must be created after started RTOS
// manual setting
cfg.setIpAddr(192,168,128,39);
cfg.setNetMask(255,255,255,0);
cfg.setGateway(192,168,128,254);
cfg.setSrvUPnP(false);
cfg.setSrvMdns(false);
// Create http client.
// Socket must create between "net.start" with "new Net()"
HttpClient http;
//Start network
net->start(cfg);
if(http.connect(IpAddr(192,168,128,254),80)){
if(http.sendMethod(HttpClient::HTTP_POST,"/mimic/")){
const char* DATA="{json}"
if(http.write(DATA,strlen(DATA))){
if(http.getStatus()==200){
char* buf[256];
short len;
if(http.read(buf,256,&len)){
printf("%.*s",len,buf);
}
}
}
}
http.close();
}
for(int c=0;;c=(c+1)%2){
led4=c;
Thread::wait(500);
}
return 0;
}
libMiMic does not have DNS client yet. Please tell me if necessary. The implementation will take some time.
Thank you for your quick response, it works for me but now I have returned buffer size "DATA" in "sendMethod" otherwise my remote server returns an error, another question is it possible to have the "Content- length in the response header returned from my remote server ?
if(http.connect(IpAddr(192,168,1,25),80)){
if(http.sendMethod(HttpClient::HTTP_POST,"/ajax",34)){
const char* DATA="{\"method\":\"lr\",\"params\":[],\"id\":1}";
if(http.write(DATA,strlen(DATA))){
if(http.getStatus()==200){
char* buf[256];
short len;
if(http.read(buf,256,len)){
pc.printf("%.*s",len,buf);
}
}
}
}
http.close();
}
It does not exist the function to get the Content-Length.
Function read is received the streaming data from HTTP stream. It return 0 when read pointer reaches the end. For example, 256 bytes of data, will return the value of 64,64,64,64,0. (This is because that the server may use Chunked-Encoding.)
In order to receive all of the data, please implemented as follows.
if(http.getStatus()==200){
char* buf[256];
short len;
do{
if(http.read(buf,256,len)){
pc.printf("%.*s",len,buf);
}
}while(len>0);
}