2010-09-28 4 views
2

Я пытаюсь выполнить http-запросы из своего веб-приложения Google App Engine и обнаружил, что мне нужно использовать URLConnection, так как это единственный класс в белом списке. Соответствующая библиотека Clojure является clojure.contrib.http.agent, и мой код выглядит следующим образом:http-запрос от Google App Engine

(defroutes example 
    (GET "/" [] (http/string (http/http-agent "http://www.example.com"))) 
    (route/not-found "Page not found")) 

Это прекрасно работает в моем развитии охраны окружающей среды, браузер отображает текст для example.com. Но когда я тестирую его с помощью сервера приложений для разработки Google:

phrygian:example wei$ dev_appserver.sh war 
2010-09-28 14:53:36.120 java[43845:903] [Java CocoaComponent compatibility mode]: Enabled 
... 
INFO: The server is running at http://localhost:8080/ 

Он просто зависает, когда я загружаю страницу. Ошибок нет. Любая идея, что может быть?

+1

ли 'HTTP-agent' создавать темы? Я понимаю, что App Engine это не нравится. – ponzao

+0

hmm хороший вопрос. Знаете ли вы, есть ли такая версия, не имеющая резьбы? – yayitswei

+0

Вы можете попробовать «http-connection» http://richhickey.github.com/clojure-contrib/http.connection-api.html, который, по-видимому, представляет собой довольно низкоуровневую оболочку вокруг «HttpURLConnection». Или просто используйте 'URLConnection'. После обеда я попытаюсь посмотреть больше вариантов. – ponzao

ответ

3

http-agent создает потоки, поэтому возможно, поэтому это не сработает.

От API documentation:

Создает (и немедленно возвращает) Агент, представляющий запрос HTTP работает в новом потоке.

Вы можете попробовать http-connection, что является оберткой вокруг HttpURLConnection, поэтому это должно сработать.

Другой альтернативой является попытка clj-http. API кажется немного более высоким, но использует Apache HttpComponents, который может быть включен в черный список.

Я угадываю, что http.async.client - это определенная не-гость из-за ее сильного асинхронного подхода.

1

Вы могли бы хотеть попробовать appengine.urlfetch/выборки из Appengine-CLJ (http://github.com/r0man/appengine-clj, а также в clojars)

Смежные вопросы