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, 12 months ago.
How to define headers and data with the HTTPClient and a put request?
Hello,
I'm trying to get some data from my mbed to the cosm storage (the old pachube.com).
In order to accomplish this I would like to use the new EthernetInterface
Import libraryEthernetInterface
mbed IP library over Ethernet
and the corresponding HTTPClient.
Import libraryHTTPClient
A HTTP Client for the mbed networking libraries
In order to use to use the cosm API I have 2 options.
The 1st option is to create the following datapacket:
PUT /v2/feeds/<ID>/datastreams/<data>.csv HTTP/1.1 Host: api.cosm.com Accept: */* X-ApiKey: atUaYYu-ofNI6CY2O< removed >aTdCclFXb3FiTT0g Content-Length: 2 <data>
The 2nd option is to greate the following datapacket:
PUT /v2/feeds/<ID>/datastreams/<data>.csv?key=atUaYYu-ofNI6CY2O< removed >aTdCclFXb3FiTT0g HTTP/1.1 Host: api.cosm.com Accept: */* Content-Length: 2 <data>
I tested both of the options with http://hurl.it and they work fine. However If I want to do this in the mbed I can only think of a way to implement the 2nd option. The code I use is:
#include "mbed.h" #include "EthernetInterface.h" #include "HTTPClient.h" EthernetInterface eth; HTTPClient http; char str[512]; int main() { eth.init(); //Use DHCP eth.connect(); //PUT data strcpy(str, "99"); HTTPText outText(str); HTTPText inText(str, 512); printf("\r\nTrying to put resource...\r\n"); //int ret = http.put("http://httpbin.org/put", outText, &inText); int ret = http.put("http://api.cosm.com/v2/feeds/94832/datastreams/Test.csv?key=key=atUaYYu-ofNI6CY2O< removed >aTdCclFXb3FiTT0g", outText, &inText); if (!ret) { printf("Executed PUT successfully - read %d characters\r\n", strlen(str)); printf("Result: %s\r\n", str); } else { printf("Error - ret = %d - HTTP return code = %d\r\n", ret, http.getHTTPResponseCode()); printf("Result: %s\r\n", str); } eth.disconnect(); while(1) { } }
However with this 2nd option the result is as follows:
Trying to put resource... Error - ret = 1 - HTTP return code = 0 Result: 99
Is there someone who knows how to fix this?
1 Answer
11 years, 11 months ago.
Update: I got it working. The problem why solution 2 wasn't working is that at line 130 of "HTTPClient.cpp" the maximum size of the path part is defined at 64 characters. In my case I have 90 characters. Increasing this parameter to 100 fixes my problem.
However I'm still interested is there is a way to get solution 1 to work.