当我点击this页面上的搜索按钮时,它会发送一个帖子请求。我想通过cli-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:semester包含':',所以我使用字符串作为这样的键“AdvancedSearchForm:semester”,在clj-http中它可以吗?
我这样做:
(spit (file "/tmp" "ts.html")
(:body (http/post initial-url
{:form-params {"AdvancedSearchForm:CourseOrSubjectSelection" "ALL_ALL", "AdvancedSearchForm:GraduateLevelSelection" "ALL"}})))`
实际上它返回的页面确实是“结果”但没有列出课程。只有模板。我想获得所有课程链接,只能通过手动点击显示。有什么帮助吗?
是我从Tamper Data截取的图片。它显示了单击“搜索”按钮后发生的情况。似乎客户端被重定向到searchresult.jsp。我用curl模仿它。我是这样做的
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 :(得分: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"}})
答案 1 :(得分: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 "..."})
或尝试使用终端中的curl命令或方便的Firefox restclient add-on手动运行请求。