Hello,


No idea about the segmentation fault but if you just want to do an HTTP request, Ocsigen Server (without Ocamlnet's netclient) may be enough for your needs.

See module Ocsigen_http_client.

http://ocsigen.org/ocsigenserver/2.0-rc1/api/Ocsigen_http_client


(I would be interested to understand the problem with netclient, though).


Vincent Balat




> Hello,

>

> I have a web application written using lwt and ocsigen that needs to get

> data using https.

>

> In order to do that, I use the Http_client.Convenience module from

> Ocamlnet, and use Lwt.detach to perform the call (there probably is a

> smater way to do this, I am open to any suggestion). The http call is

> performed and the data is displayed, but then the server crashed,

> apparently because of a segfault.

>

> here is the code for a test eliom module that reproduce the problem,

> compiled using

>

> ocamlfind ocamlc -c -thread -package

> equeue-ssl,netclient,lwt,lwt.preemptive,ocsigen test_server.ml

>

> Cheers

>

>

> -Pierre

>

>

> (*************************************)

>

> open Lwt

> open XHTML.M

> open Eliom_services

> open Eliom_parameters

> open Eliom_sessions

> open Eliom_predefmod.Xhtml;;

>

>

>

>

> (* initialising Http_client.Convenience to use https *)

> Ssl.init();

>

> Http_client.Convenience.configure_pipeline

> (fun p ->

> let ctx = Ssl.create_context Ssl.TLSv1 Ssl.Client_context in

> let tct = Https_client.https_transport_channel_type ctx in

> p # configure_transport Http_client.https_cb_id tct

> )

> ;;

>

>

>

> module H = Http_client.Convenience

>

>

> let test_service = new_service ~path:[""]

> ~get_params:unit

> ()

> ;;

>

>

> let test_handler = fun sp () () ->

> (* thread that request data from a url *)

> Lwt_preemptive.detach (function () -> H.http_get "https://ocsigen.org") ()

> >>= function s ->

> (*page that display the data*)

> return (

> html (head (title (pcdata "test")) [])

> (body [

> h1 [pcdata "the data are:"];

> p [ pcdata s]

> ]

> )

> )

> ;;

> register test_service test_handler;;