2013-09-07 2 views
0

Когда я нажимаю кнопку поиска на странице this, он отправляет запрос на отправку. Я хочу сделать сообщение через cli-http. Как я могу это сделать?Как использовать clj-http для отправки запроса?

(def default-http-opts 
    {:socket-timeout 10000 
    :conn-timeout 10000 
    :insecure? true 
    :throw-entire-message? false}) 

(clj-http/post initial-url default-http-opts) 

может размещать запрос, но проблема в том, что я хочу передать некоторые параметры. Эти параметры (выбранные кнопки) по умолчанию указаны на странице.

Они:

AdvancedSearchForm:CourseOrSubjectSelection=ALL_ALL 
AdvancedSearchForm:GraduateLevelSelection=ALL 

AdvancedSearchForm:allStudyAreas=t 

AdvancedSearchForm:departmentList= 

AdvancedSearchForm:facultyList= 

AdvancedSearchForm:keywords= 

AdvancedSearchForm:level=ALL 

AdvancedSearchForm:semester=ALL 

oracle.adf.faces.FORM=AdvancedSearchForm 

oracle.adf.faces.STATE_TOKEN=_id21519:_id21520 

source=AdvancedSearchForm:searchButton 

Ключ AdvancedSearchForm: семестр содержит ':', поэтому я использую строку в качестве ключа, как этот "AdvancedSearchForm: семестр", это КИ в CLJ-клиенте?

Я делаю это так:

(spit (file "/tmp" "ts.html") 
    (:body (http/post initial-url 
     {:form-params {"AdvancedSearchForm:CourseOrSubjectSelection" "ALL_ALL",       "AdvancedSearchForm:GraduateLevelSelection" "ALL"}})))` 

На самом деле страница возвращает действительно «Результаты», но нет курсов не указаны. только шаблон. Я хочу получить все ссылки курса, которые отображаются только вручную. Любая помощь?

This - изображение, которое я снимаю с экрана из данных Tamper. Он показывает, что происходит после нажатия кнопки «Поиск». Кажется, клиент перенаправляется на searchresult.jsp. Я использую завиток, чтобы подражать этому. Я делаю это, как этот

curl -D "form data..." https://handbook.unimelb.edu.au/faces/htdocs/user/search/AdvancedSearch.jsp

Затем быстро запустить

curl https://handbook.unimelb.edu.au/faces/htdocs/user/search/SearchResults.jsp

Нет результатов содержание показаны, хотя страница загружается.

+0

Почему вы хотите автоматизировать процесс в этом конкретном сценарии? – Chiron

+0

Я хочу отменить страницу результатов. – yehe

+0

Вы должны получить данные в той же команде curl, в которую вы отправляете запрос! Вы не можете запускать два разных запроса в быстрой последовательности, поскольку они рассматриваются как полностью отличные от сервера. Что возвращает AdvancedSearch.jsp (ваш первый запрос выше)? Страница с результатами или перенаправление на страницу SearchResults? – claj

ответ

1

С их GitHub страницы (https://github.com/dakrone/clj-http):

;; Send form params as a urlencoded body (POST or PUT) 
(client/post "http//site.com" {:form-params {:foo "bar"}}) 
+0

это не работает. – yehe

+1

@luckykevin "это не работает". не очень информативен – Chiron

+0

Да, он только обрывает страницу безрезультатно. Фактически страница, которую он возвращает, - «Результаты», но никаких курсов не указано. только шаблон. Это не то же самое, что я вижу после нажатия кнопки поиска. Он ведет себя так же, как без добавления: form-params part. Поэтому я думал, что это не сработало. – yehe

1

Похоже, что сервер не понимает, параметры, отправляемые на него.

Уклонение в использовании - percent-encoding. Попробуйте проверить, если получить в использовании, используя функциональные возможности отладки в CLJ безрезультатно-HTTPS README.md:

;; print request info to *out*, including request body: 
(client/post "http://example.org" {:debug true :debug-body true :body "..."}) 

или попытаться вручную запускать запросы либо завитка команды в терминале или с удобной Firefox restclient add-on ,

+0

Я обновил свой вопрос. Пожалуйста, помогите .......... – yehe

+0

варианты отладки очень полезны, хорошо, чтобы показать, как их использовать – sergio

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