Not at all familiar with libcurl, but from lookng at man pages...
On Wed, Jul 28, 2010 at 6:56 PM, Birch <[email protected]> wrote:
> I am not well versed in c++, just a disclamer. I have muddled through
> creating a small client and I want to post the binary output via
> HTTP. Here is the source I have so far:
>
> #define CURL_STATICLIB
> #include <iostream>
> #include <fstream>
> #include <string>
> #include "mvm.pb.h"
> #include "curl/curl.h"
> #include "curl/types.h"
> #include "curl/easy.h"
>
> using namespace std;
>
> int main(int argc, char* argv[]) {
> // Verify that the version of the library that we linked against is
> // compatible with the version of the headers we compiled against.
> GOOGLE_PROTOBUF_VERIFY_VERSION;
>
> mvm::protobuf::prov::prov prov;
> mvm::protobuf::prov_Artifact* artifact = prov.mutable_object();
> mvm::protobuf::prov_Execution* action = prov.mutable_action();
> artifact->set_uuid("foo");
> artifact->set_classification("unclassified");
> action->set_action(mvm::protobuf::prov_Action_CREATED);
> mvm::protobuf::prov_Actor* actor = action->mutable_performedby();
> mvm::protobuf::prov_Person* person = actor->mutable_person();
> person->set_uuid("person_uuid");
> mvm::protobuf::prov_TimeStamp* timestamp = action-
> >mutable_performedat();
> timestamp->set_datetime(1234567890);
>
>
> fstream output("mvm.out", ios::out | ios::trunc | ios::binary);
> ostrstream os; // <- what to use here?
> if (!prov.SerializeToOstream(&output)) {
>
I would just serialize to a string here:
string s;
if (!prov.SerializeToString(&s)) { .. }
> cerr << "Failed to write mvm." << endl;
> return -1;
> }
> if (!prov.SerializeToOstream(&os)) {
> cerr << "Failed to write mvm to os." << endl;
> return -1;
> }
> CURL *curl;
>
> curl = curl_easy_init();
> char *url = "http://localhost:8080/Protobuf/PostServlet";
> curl_easy_setopt(curl, CURLOPT_URL, url);
> struct curl_httppost *formpost=NULL;
> struct curl_httppost *lastptr=NULL;
> curl_formadd(&formpost, &lastptr,
> CURLFORM_COPYNAME, "mydata",
CURLFORM_PTRCONTENTS, "test\0test", // <- should
point to &os
> CURLFORM_CONTENTSLENGTH, 50, // <- need to know the
> size of &os
>
Then just pass in s.data() and s.size() as the pointer and length.
> CURLFORM_END);
> curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
>
> curl_easy_perform(curl);
> curl_easy_cleanup(curl);
>
> // Optional: Delete all global objects allocated by libprotobuf.
> google::protobuf::ShutdownProtobufLibrary();
>
> return 0;
> }
>
>
> I added comments where I am having trouble. I basically just wan to
> populate the body (content) of the HTTP post message with the binary
> output of the SerializeToOStream call. Any help would be greatly
> appreciated!
>
> Birch
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<protobuf%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/protobuf?hl=en.
>
>
--
You received this message because you are subscribed to the Google Groups
"Protocol Buffers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/protobuf?hl=en.