Странная проблема/ошибка HTTP с Lisp

Ясно, что setSeconds() относится к текущему времени. Вы можете использовать alert(), чтобы увидеть еще большие различия. Однако следующее будет работать так, как вы ожидаете: Заменить:

date.setSeconds(date.getSeconds() + duration);

на:

    date.setHours(date.getHours(), date.getMinutes(), date.getSeconds()+ duration, 0);

Обратите внимание, что я обнуляю миллисекунды, вы можете обрабатывать их как хотите. см. рабочий пример jsfiddle

5
задан sblundy 15 January 2009 в 04:29
поделиться

2 ответа

Несколько вещей. Во-первых, к Вашей озабоченности по поводу этих 400 ошибок Вы возвращаетесь, несколько возможностей приходят на ум:

  • "Хост": не на самом деле допустимое поле заголовка в HTTP/1.0, и в зависимости от того, как фашист, который веб-сервер, который Вы связываетесь, о стандартах, он отклонил бы это как плохой запрос на основе протокола, который Вы утверждаете, что говорили.
  • Вам нужен CRLF между Вашей строкой Запроса и каждой из строк заголовка.
  • Возможно, что Ваш (запрос) функция возвращает что-то для поля Request-URI - Вы занимаете место в значении запроса как содержание этой части строки Запроса - который является поддельным так или иначе (плохо вышел из символов, и т.д.). Наблюдение, что это производит, могло бы выручить некоторых.

Некоторый другой более общий указатель для помощи Вам вдоль Вашего пути:

  • (read-buf-nonblock) очень сбивает с толку. Где символ 'c' определен? Почему является 'eof' (gensym) редактором и затем не присвоенный какое-либо значение? Это очень походит на копию байта байтом, сделанную прямо из обязательной программы, и шлепнулось в Lisp. Похоже на то, что Вы повторно реализовали, вот (последовательность чтения). Пойдите посмотреть здесь в Гиперспецификации языка Common LISP и посмотрите, является ли это тем, в чем Вы нуждаетесь. Другая половина из этого должна установить Ваш сокет, который Вы создали, чтобы не заблокироваться. Это довольно легко, даже при том, что документация SBCL почти тиха по теме. Используйте это:

    (socket-make-stream socket :input t :output t :buffering :none :timeout 0)

  • Последняя форма которой (позволяют), (http-подключения) не необходима. Просто оцените

    (socket-make-stream socket :input t :output t :buffering :none)

без позволенного, и http-подключение должен все еще возвратить правильное значение.

  • В (запросе HTTP)...

Замена:

 (format stream "~a~%~%" request )
 (let ((data (make-string buffer)))
 (setf data (subseq data 0
            (read-buf-nonblock data
                               stream)))
 (princ data)
 (> (length data) 0)))

с

(format stream "~a~%~%" request )
(let ((data (read-buf-nonblock stream)))
    (princ data)
    (> (length data) 0)))

и заставьте (read-buf-nonblock) возвратить строку данных, скорее это имеющее его присваивается в функции. Таким образом, где Вы имеете buffer быть присвоенным, создайте переменную buffer в и затем возвращают его. То, что Вы делаете, называют, полагаясь на "побочные эффекты" и имеет тенденцию производить больше ошибок и тяжелее находить ошибки. Используйте его только, когда Вы имеете к, особенно на языке, который помогает не зависеть от них.

  • Я главным образом как путь получать-страница определяюсь. Это чувствует очень в парадигме функционального программирования. Однако необходимо или изменить имя (запрос) функция или переменный запрос. Наличие обоих там сбивает с толку.

Yikes, вред рук. Но надо надеяться это помогает. Сделанный ввод.:-)

4
ответ дан 14 December 2019 в 09:02
поделиться

Вот возможность:

HTTP/1.0 определяет последовательность CR LF как маркер конца строки.

~% директива формата генерирует a #\Newline (LF на большинстве платформ, хотя см. CLHS).

Некоторые сайты могут быть терпимы к пропавшим без вести CR, другие не так.

3
ответ дан 14 December 2019 в 09:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: