Not at all familiar with libcurl, but from lookng at man pages...

On Wed, Jul 28, 2010 at 6:56 PM, Birch <moa...@gmail.com> 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 proto...@googlegroups.com.
> To unsubscribe from this group, send email to
> protobuf+unsubscr...@googlegroups.com<protobuf%2bunsubscr...@googlegroups.com>
> .
> 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 proto...@googlegroups.com.
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.

Reply via email to