Il fonctionne pour moi:
(with-open-stream (stream (ext:open-http
"http://stackoverflow.com/questions/234242424242"
:if-does-not-exist nil))
(format t "~&Stream: ~A~%" stream))
Sortie:
;; connecting to "http://stackoverflow.com/questions/234242424242"...connected...HTTP/1.1 404 Not Found
;; HTML source of Page not found
Stream: NIL
NIL
Il y a un délai pour obtenir la connexion, mais cela fonctionne.
Si la page existe:
[7]> (with-open-stream (stream (ext:open-http
"http://stackoverflow.com/questions/36003343/clisp-open-http-example"
:if-does-not-exist nil))
(format t "~&Stream: ~A~%" stream))
;; connecting to "http://stackoverflow.com/questions/36003343/clisp-open-http-example"...connected...HTTP/1.1 200 OK
Stream: #<IO INPUT-BUFFERED SOCKET-STREAM CHARACTER stackoverflow.com:80>
NIL
Avec Wikipédia je ne pouvais pas le faire fonctionner depuis Wikipedia.org redirige vers HTTPS et EXT:OPEN-HTTP
ne peut gérer HTTPS directement, ni il peut gérer réoriente:
ici si HTTPS est utilisé directement:
[10]> (with-open-stream (stream (ext:open-http
"https://en.wikipedia.org/wiki/Common_Lisp"
:if-does-not-exist nil))
(format t "~&Stream: ~A~%" stream))
*** - OPEN-HTTP: "https://en.wikipedia.org/wiki/Common_Lisp" is not an HTTP URL
The following restarts are available:
ABORT :R1 Abort main loop
Break 1 [11]> :r1
Si "https" est remplacé par "http", CLISP ne construit pas une bonne adresse:
[12]> (with-open-stream (stream (ext:open-http
"http://en.wikipedia.org/wiki/Common_Lisp"
:if-does-not-exist nil))
(format t "~&Stream: ~A~%" stream))
;; connecting to "http://en.wikipedia.org/wiki/Common_Lisp"...connected...HTTP/1.1 301 TLS Redirect --> "https://en.wikipedia.org/wiki/Common_Lisp"
;; connecting to "http://en.wikipedia.orghttps://en.wikipedia.org/wiki/Common_Lisp"...
*** - PARSE-INTEGER: substring "" does not have integer syntax at position 0
The following restarts are available:
ABORT :R1 Abort main loop
Break 1 [13]>
Je pense que vous allez avoir des problèmes avec d'autres choses dans le processus: presque tous les sites web utilisent HTTPS de nos jours, OPEN-HTTP de CLISP ne supporte pas HTTPS. Aussi, d'après ce que je peux voir, les articles de Wikipedia ne sont pas placés dans des fichiers * .html, et d'autres fichiers ont des chemins plus compliqués. – mobiuseng
En relation: [Existe-t-il une API Wikipedia?] (Http://stackoverflow.com/q/627594/124319). Aussi, jetez un oeil à [Drakma] (http://weitz.de/drakma/) – coredump
Merci pour les réponses à ce jour, mais s'il vous plaît se concentrer sur la question: comment empêchez-vous d'ouvrir-http de suspendre lorsque la page ne le fait pas existe, indépendamment de son URL. Un exemple suffirait. – Leo