LINUX.ORG.RU

2 вопроса про cl-trivial-http


0

0

Прошу подсказок у тех кто работал с этой библиотекой:

1) (http-get url) возвращает список из 3-х элементов, третий - поток. как с ним работать?

когда я пытаюсь пользовать download-stream из того этого же пакета возникает такая ошибка -

decoding error on stream
#<SB-SYS:FD-STREAM for "a socket" {B0D9289}> (:EXTERNAL-FORMAT
:UTF-8):
  the octet sequence (255 216 255 224) cannot be decoded.
   [Condition of type SB-INT:STREAM-DECODING-ERROR]
я понимаю, что это ошибка на моей стороне, но как с ней бороться не знаю. Мой емакс понимает ютф-8.

у меня не получилось(no binary stream), но хотелось бы узнать можно ли использовать read-byte для этого потока. К примеру, когда посылаю GET: http://site.ru/image.gif и мне хочется прочитать байты из отданной сервером картинки.

Также в этой библиотеке есть код для загрузки картинок, но он не включён в пакет. Более того в этом файле есть свои версии http-get/post. Я делаю -

>> (load "trivial-http/pastes/download-images.fasl")
T
но не понимаю, почему нет символов, объявлённых в этом файле, в том пакете, из которого я делал его load.

и я так понимаю, надо именно с этими(из download-images.lisp) http-get/post работать для загрузки картинок?.

2)

decoding error on stream
#<SB-SYS:FD-STREAM for "a socket" {C013331}> (:EXTERNAL-FORMAT
:UTF-8):
  the octet sequence (229 32 115) cannot be decoded.
   [Condition of type SB-INT:STREAM-DECODING-ERROR]
Backtrace:
  0: (SB-INT:STREAM-DECODING-ERROR #<SB-SYS:FD-STREAM for "a socket" {C013331}> (229 32 115))
      Locals:
        SB-DEBUG::ARG-0 = #<SB-SYS:FD-STREAM for "a socket" {C013331}>
        SB-DEBUG::ARG-1 = (229 32 115)

Собственно это то, что я упоминал в 1) . Не на всех url возникает такое, но на многих.

на всякий случай более подробная развёртка:

decoding error on stream
#<SB-SYS:FD-STREAM for "a socket" {C013331}> (:EXTERNAL-FORMAT
:UTF-8):
  the octet sequence (229 32 115) cannot be decoded.
   [Condition of type SB-INT:STREAM-DECODING-ERROR]

Restarts:
 0: [ATTEMPT-RESYNC] Attempt to resync the stream at a character boundary and continue.
 1: [FORCE-END-OF-FILE] Force an end of file.
 2: [ABORT] Return to SLIME's top level.
 3: [TERMINATE-THREAD] Terminate this thread (#<THREAD "repl-thread" RUNNING {AEEBB91}>)

Backtrace:
  0: (SB-INT:STREAM-DECODING-ERROR #<SB-SYS:FD-STREAM for "a socket" {C013331}> (229 32 115))
      Locals:
        SB-DEBUG::ARG-0 = #<SB-SYS:FD-STREAM for "a socket" {C013331}>
        SB-DEBUG::ARG-1 = (229 32 115)
  1: (SB-IMPL::STREAM-DECODING-ERROR-AND-HANDLE #<SB-SYS:FD-STREAM for "a socket" {C013331}> 3)
      Locals:
        SB-DEBUG::ARG-0 = #<SB-SYS:FD-STREAM for "a socket" {C013331}>
        SB-DEBUG::ARG-1 = 3
  2: (SB-IMPL::INPUT-CHAR/UTF-8 #<SB-SYS:FD-STREAM for "a socket" {C013331}> NIL :EOF)
      Locals:
        SB-DEBUG::ARG-0 = #<SB-SYS:FD-STREAM for "a socket" {C013331}>
        SB-DEBUG::ARG-1 = NIL
        SB-DEBUG::ARG-2 = :EOF
      Catch-tags:
        SB-IMPL::EOF-INPUT-CATCHER
  3: (SB-IMPL::ANSI-STREAM-READ-CHAR #<SB-SYS:FD-STREAM for "a socket" {C013331}> NIL :EOF #<unavailable argument>)
      Locals:
        SB-DEBUG::ARG-0 = #<SB-SYS:FD-STREAM for "a socket" {C013331}>
        SB-DEBUG::ARG-1 = NIL
        SB-DEBUG::ARG-2 = :EOF
        SB-DEBUG::ARG-3 = :<NOT-AVAILABLE>
  4: (SB-IMPL::ANSI-STREAM-READ-SEQUENCE "
      86     126         56         V
      87     127         57         W
      88     130         58         X
      89     131         59         Y
      90     132         5A         Z
      91     133         5B         [
      92     134         5C         \\
      93     135         5D         ]
      94     136         5E         ^ ..)
  5: (READ-SEQUENCE "
      86     126         56         V
      87     127         57         W
      88     130         58         X
      89     131         59         Y
      90     132         5A         Z
      91     133         5B         [
      92     134         5C         \\
      93     135         5D         ]
      94     136         5E         ^ ..)[:EXTERNAL]
  6: (TRIVIAL-HTTP::COPY-STREAM #<SB-SYS:FD-STREAM for "a socket" {C013331}> #<SB-SYS:FD-STREAM for "file /home/lindie/book-library/K&R 1999 (tutorial)/data/0CTutorial.html" {C01D5F9}>)
      Locals:
        SB-DEBUG::ARG-0 = #<SB-SYS:FD-STREAM for "a socket" {C013331}>
        SB-DEBUG::ARG-1 = #<SB-SYS:FD-STREAM for "file /home/lindie/book-library/K&R 1999 (tutorial)/data/0CTutorial.html" {C01D5F9}>
  7: (TRIVIAL-HTTP::DOWNLOAD-STREAM #<SB-SYS:FD-STREAM for "a socket" {C013331}> #P"/home/lindie/book-library/K&R 1999 (tutorial)/data/0CTutorial.html")[:EXTERNAL]
      Locals:
        SB-DEBUG::ARG-0 = 4
        SB-DEBUG::ARG-1 = #<SB-SYS:FD-STREAM for "a socket" {C013331}>
        SB-DEBUG::ARG-2 = #P"/home/lindie/book-library/K&R 1999 (tutorial)/data/0CTutorial.html"
  8: (TRIVIAL-HTTP:HTTP-DOWNLOAD "http://www.iu.hio.no/~mark/CTutorial/CTutorial.html" #P"/home/lindie/book-library/K&R 1999 (tutorial)/data/0CTutorial.html")[:EXTERNAL]
      Locals:
        SB-DEBUG::ARG-0 = 2
        SB-DEBUG::ARG-1 = "http://www.iu.hio.no/~mark/CTutorial/CTutorial.html"
        SB-DEBUG::ARG-2 = #P"/home/lindie/book-library/K&R 1999 (tutorial)/data/0CTutorial.html"
  9: (COPY-DATA-TO-DIR ("http://www.iu.hio.no/~mark/CTutorial/CTutorial.html") #P"/home/lindie/book-library/K&R 1999 (tutorial)/data/")
      Locals:
        SB-DEBUG::ARG-0 = ("http://www.iu.hio.no/~mark/CTutorial/CTutorial.html")
        SB-DEBUG::ARG-1 = #P"/home/lindie/book-library/K&R 1999 (tutorial)/data/"
 10: (ADD-BOOK "K&R 1999 (tutorial)")
      Locals:
        SB-DEBUG::ARG-0 = "K&R 1999 (tutorial)"

ps: заранее спасибо осилившим столько букв :)

trivial-http и trivial-sockets довольно старые библиотеки, там могут быть несовместимости с современными реализациями.
Поставь лучше DRAKMA

Love5an
()
Ответ на: комментарий от Love5an

спасибо, теперь использую её.

Может вы мне поможете и со следующей проблемой - теряется слайм рантайм (Lisp connection closed unexpectedly; connection broken by remote peer) при drakma:http-request. В SBCL всё работает замечательно

pseudo-cat ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.