httpd-modules-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <oh...@cox.net>
Subject Re: Anyone have some example code doing simple HTTP GET request from within a module?
Date Thu, 01 Jan 1970 00:00:00 GMT

---- Sorin Manolache <sorinm@gmail.com> wrote: 
> On 2012-06-23 04:47, ohaya@cox.net wrote:
> > Hi,
> >
> > Per earlier threads on this list, I've been working on an Apache module.  For the
time being, I'm kind of stuck because of the problems that I've run into with trying to integrate
my module with a 3rd party library, so just for my module, which is mainly a proof-of-concept,
I'd like to have my module do an HTTP GET request.
> >
> > So, I was wondering if anyone has some simple example code for doing that from within
a module, maybe using libcurl, or just natively using sockets?
> >
> > I'm trying to do this myself, and I've been looking at using libcurl, but most of
the examples that I've seen use the "easy" setup, so if someone has something like that that
can be shared, it'd be a big help.  Conversely, if I figure it out, I'll post some working
snippets here :)...
> >
> I'll say the same thing as Ben, try with apache, either mod_proxy or 
> ap_run_sub_request. That if you make one outgoing request per incoming 
> request. If you want several outgoing requests, in parallel preferably, 
> per incoming request, then go with some 3rd-party library.
> 
> I have some in-house C++ wrappers for libcurl (curl_multi_* + timeouts + 
> client pools), but they are not straightforward to use, a lot of setup 
> is involved, and they are not thoroughly tested.
> 
> S

Sorin and Ben,

I'll take a look at mod_proxy.c later, but, FYI, I just tried the following:

- I added the following to my tweaked mod_headers.c:

#include "curl/curl.h"
.
.
.
void callCurl() {
  CURL *curl;
  CURLcode res;
 
  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com");
    res = curl_easy_perform(curl);
 
    /* always cleanup */ 
    curl_easy_cleanup(curl);
  }
  return;
}

- I compiled with apxs, with no additonal -L or -l

- I added a call to callCurl() in my code where I knew it'd get called.

- In my httpd.conf, I added in front of the LoadModule for mod_headers:

LoadFile /usr/lib64/libcurl.so.3.0.0


Then I started Apache in single process (-k start -X), and it started, and then I tested,
and it worked!!  

For this prototype, I'll try to see if I can get this to the point that I confirm what I'm
doing, then I'll go back and look at mod_proxy.c to maybe do native HTTP GET.

Thanks,
Jim

Mime
View raw message