Discussion:
Top level avec libcurl
(trop ancien pour répondre)
carlos
2007-06-14 09:03:44 UTC
Permalink
Bonjour à tous,

Je travaille sur un programme OCaml permettant d'automoatiser l'analyse de
sites internet. Pour les connexions HTTP, j'utilise la librairie C libcurl et
le lien OCaml correspondant ocurl. Pour faire mes tests, j'ai fabriqué un
toplevel spécifique compilé avec la librairie libcurl.

Mon problème est que j'ai régulièrement des "Segmentation fault" dans le
toplevel ! Voici la ligne de commande qui m'a permis de le fabriquer :

ocamlmktop -custom -o curltop curl/curl.cma -cclib \
-L/opt/ocaml-3.10.0/lib/ocaml/curl -cclib -lcurl

une idée d'ou ça peut venir ?

merci d'avance !
Samuel Colin
2007-06-16 12:00:20 UTC
Permalink
Post by carlos
Bonjour à tous,
Bonjour,
Post by carlos
une idée d'ou ça peut venir ?
Sans savoir les choses que tu testes, ça risque d'être difficile. Je
dirais que ça vient des bindings curl, voilà tout ce que je peux dire.
Baltimore
2007-06-17 09:53:23 UTC
Permalink
Post by carlos
Bonjour à tous,
Je travaille sur un programme OCaml permettant d'automoatiser l'analyse de
sites internet. Pour les connexions HTTP, j'utilise la librairie C libcurl et
le lien OCaml correspondant ocurl. Pour faire mes tests, j'ai fabriqué un
toplevel spécifique compilé avec la librairie libcurl.
Mon problème est que j'ai régulièrement des "Segmentation fault" dans le
ocamlmktop -custom -o curltop curl/curl.cma -cclib \
-L/opt/ocaml-3.10.0/lib/ocaml/curl -cclib -lcurl
une idée d'ou ça peut venir ?
merci d'avance !
Ton segfault doit venir à coup sûr de ton code, et pas de la librairie
curl.
Vérifie que tu utilises bien cette librairie, ainsi que le binding.
Sinon tu peux vérifier que les versions de la lib C curl et celle de
Ocurl sont compatibles.
carlos
2007-06-20 13:28:28 UTC
Permalink
Post by Baltimore
Ton segfault doit venir à coup sûr de ton code, et pas de la librairie
curl.
Vérifie que tu utilises bien cette librairie, ainsi que le binding.
Sinon tu peux vérifier que les versions de la lib C curl et celle de
Ocurl sont compatibles.
Effectivement, l'erreur venait bien de l'utilisation de la librairie
curl. Je m'en suis rendu compte après avoir passé le week end à potasser
la doc C ! La doc de ocurl est extrèmement réduite ce qui est peut
être normal pour un binding... Du coup, je pense écrire un article
dessus dès que j'aurais fini mes travaux. Programmer des agents qui
parcourent le web à la recherche d'informations peut être plus amusant
en OCaml qu'en Perl ;)

Merci à tous.
Samuel Thibault
2007-06-21 18:52:27 UTC
Permalink
Post by carlos
Post by Baltimore
Ton segfault doit venir à coup sûr de ton code, et pas de la librairie
curl.
Vérifie que tu utilises bien cette librairie, ainsi que le binding.
Sinon tu peux vérifier que les versions de la lib C curl et celle de
Ocurl sont compatibles.
Effectivement, l'erreur venait bien de l'utilisation de la librairie
curl.
Heu, un binding qui segfaultte quand on l'utilise mal, ce n'est pas un
bon binding a priori, non ? :)

Samuel
o***@gmail.com
2007-06-25 08:44:36 UTC
Permalink
Post by Samuel Thibault
Post by carlos
Post by Baltimore
Ton segfault doit venir à coup sûr de ton code, et pas de la librairie
curl.
Vérifie que tu utilises bien cette librairie, ainsi que le binding.
Sinon tu peux vérifier que les versions de la lib C curl et celle de
Ocurl sont compatibles.
Effectivement, l'erreur venait bien de l'utilisation de la librairie
curl.
Heu, un binding qui segfaultte quand on l'utilise mal, ce n'est pas un
bon binding a priori, non ? :)
effectivement, c'est pas terrible !
Mais il se peut aussi que la bibliothèque C soit particulèrement mal
fichue et que la "sécurisation" du binding soit très coûteuse.

--
Olivier
carlos
2007-06-25 14:31:19 UTC
Permalink
Post by o***@gmail.com
Post by Samuel Thibault
Heu, un binding qui segfaultte quand on l'utilise mal, ce n'est pas un
bon binding a priori, non ? :)
effectivement, c'est pas terrible !
Mais il se peut aussi que la bibliothèque C soit particulèrement mal
fichue et que la "sécurisation" du binding soit très coûteuse.
Pour ce cas précis (libcurl + ocurl), je ne pense pas que la librairie
soit particulièrement mal faite, elle existe depuis très longtemps,
beaucoup de gens l'utilisent, de nombreux bindings existent pour
d'autres langages, etc ...

Surtout, utiliser libcurl et le binding ocurl me semble être une des
solutions les plus viables et offrant le plus de possibilités (support
de HTTPS en particulier) pour faire des requêtes HTTP en OCaml.

Quelqu'un a d'autres idées peut être ?
Gabriel Kerneis
2007-06-25 14:47:12 UTC
Permalink
Post by carlos
Surtout, utiliser libcurl et le binding ocurl me semble être une des
solutions les plus viables et offrant le plus de possibilités (support
de HTTPS en particulier) pour faire des requêtes HTTP en OCaml.
Quelqu'un a d'autres idées peut être ?
Réimplémenter tout le protocole. C'est ce que fait le projet ocsigen :
http://ocsigen.org (voir le répertoire http dans les sources).

Après, ce n'est pas nécessairement optimal, hein (surtout qu'Ocsigen
n'est pas encore arrivé au stade de la 1.0)...
--
Gabriel
carlos
2007-06-26 07:09:13 UTC
Permalink
Post by Gabriel Kerneis
http://ocsigen.org (voir le répertoire http dans les sources).
Après, ce n'est pas nécessairement optimal, hein (surtout qu'Ocsigen
n'est pas encore arrivé au stade de la 1.0)...
... oui, je me doutais bien que quelqu'un allait proposer ce genre de
solution ;)

D'après ce que j'ai vu d'ocsigen, c'est un serveur HTTP, il sait
interpréter une requête et la renvoyer au client mais ici on a besoin de
faire le chemin "inverse", cad fabriquer une requête et télécharger la
réponse. C'est sur que c'est pas la mer à boire, ça devrait facilement
être implémentable en OCaml.

Ce qui me gêne le plus, c'est implémenter le protocole HTTPS, et surtout
de le faire correctement. C'est une des raisons supplémentaires qui me
pousse à utiliser libcurl.
Remi Vanicat
2007-06-26 12:52:00 UTC
Permalink
Post by carlos
Post by Gabriel Kerneis
Réimplémenter tout le protocole. C'est ce que fait le projet ocsigen
: http://ocsigen.org (voir le répertoire http dans les sources).
Après, ce n'est pas nécessairement optimal, hein (surtout qu'Ocsigen
n'est pas encore arrivé au stade de la 1.0)...
... oui, je me doutais bien que quelqu'un allait proposer ce genre de
solution ;)
D'après ce que j'ai vu d'ocsigen, c'est un serveur HTTP, il sait
interpréter une requête et la renvoyer au client mais ici on a besoin
de faire le chemin "inverse", cad fabriquer une requête et télécharger
la réponse. C'est sur que c'est pas la mer à boire, ça devrait
facilement être implémentable en OCaml.
ocamlnet contient la partie cliente du protocole http :
http://www.ocaml-programming.de/programming/ocamlnet.html

Par contre, je ne sais pas comment ça ce passe pour https, mais
ocamlnet connaît ssl, donc cela doit être faisable.
--
Rémi Vanicat
Loading...