Home
Reading
Searching
Subscribe
Sponsors
Statistics
Posting
Contact
Spam
Lists
Links
About
Hosting
Filtering
Features Download
Marketing
Archives
FAQ
Blog
 
Gmane
From: Frank Mcgeough <fmcgeough <at> mac.com>
Subject: Re: request for some simple HTTP response parser applications
Newsgroups: gmane.comp.web.curl.library
Date: Monday 2nd August 2010 22:34:03 UTC (over 6 years ago)
> On Mon, Aug 2, 2010 at 1:27 AM, Colin Hogben   
> wrote:
> Daniel Stenberg wrote:
>
> http://curl.haxx.se/libcurl/c/example.html
>
> Examples are a good way for people to get a feel for how the library  
> works.  However, even if you know there are code examples available,  
> IMO it's quite hard to find them on the website.  Currently there  
> are links from "C API" and "Features".  I think it would be good if  
> they were also referenced from the "Using libcurl" page, the  
> Tutorial and, crucially, in the navigation panel at the top "libcurl  
> index" level.
>
> -- 
> Colin Hogben
>
> On Aug 2, 2010, at 2:09 PM, Murat Sezgin wrote:
>
>> Thanks for this info. I want to use libcurl to parse a HTTP buffer.  
>> I couldn't find an example for this purpose on this example page.  
>> Is it possible to do this with libcurl? I will pass a HTTP buffer  
>> or stream (most probably it will be a char * pointer) and it will  
>> parse the header of this buffer/stream.
>>
>> Regards,
>> Murat
>>
>>
>
Libcurl makes this pretty simple (assuming I'm understanding what  
you're asking). You can use CURLOPT_HEADERFUNCTION and  
CURLOPT_WRITEHEADER options with curl_easy_setopt to get callbacks for  
each header received back from your HTTP request.

Assuming you are writing in C++, for example, you could define a class  
HttpHeaders

class HttpHeaders {
public:
      void addHeader(const string& s);
};

and then setup a static function for the callback :

size_t CurlCallback::rcvHeaders(void *buffer, size_t size, size_t  
nmemb, void *userp) {
     char *d = (char*)buffer;
     CHttpHeaders *pHeaders = (HttpHeaders *)(userp);

     int result = 0;
     if (pHeaders != NULL) {
         std::string s = "";
         s.append(d, size * nmemb);
         pHeaders->addHeader(s);
         result = size * nmemb;
     }
     return result;
}

then just ensure you set the options properly before executing the  
request :

curl_easy_setopt(curlHandle, CURLOPT_HEADERFUNCTION,  
&CurlCallback::rcvHeaders); // our static function
curl_easy_setopt(curlHandle, CURLOPT_WRITEHEADER, &headers); //  
"headers" is a member variable referencing HttpHeaders

parsing the individual string in a header is dependent upon what  
language you are using and what headers you expect back. Does this  
help?
 
CD: 3ms