0

このページの検索ボタンをクリックすると、投稿リクエストが送信されます。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"}})))`

実際に返されるページは確かに「結果」ですが、コースがリストされていません。テンプレートのみ。手動でクリックするだけで表示されるすべてのコース リンクを取得したい。何か助けはありますか?

これ改ざんデータからスクリーンショットした画像です。検索ボタンをクリックした後に何が起こるかを示しています。クライアントが 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

ページをダウンロードしても、結果の内容は表示されません。

4

2 に答える 2

2

サーバーは、送信したパラメーターを認識していないようです。

使用中のエスケープはパーセント エンコーディングです。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 アドオンを使用して、リクエストを手動で実行してみてください。

于 2013-09-08T10:09:20.110 に答える
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"}})
于 2013-09-07T13:22:25.687 に答える