2010-10-09 99 views
3

我需要使用cookie向https:// URL發出一些請求。我知道如何使用cURL從命令行執行該操作,並希望使用Java將其自動化。java https://請求:HTTPclient或(命令行+ curl)?

我正在看HTTPClient,我正在變得非常困惑。看起來好像需要很多蹩腳的節目。我有什麼理由繼續追求這樣的努力嗎?

另一種方式是從Java內部執行cURL可執行文件,看起來好像更容易,如果更多的痛苦。

+0

「好像它會更容易,如果更多的痛苦。」 - 這聽起來像是一個矛盾 – 2010-10-09 15:41:29

+0

呃,我的意思是更簡單(但不容易) – 2010-10-09 23:06:27

+0

你覺得什麼混淆? Apache HttpClient或其SSL/TLS配置? – Bruno 2010-10-10 01:13:58

回答

2

看到他們的指南Using SSL,從我可以告訴它是相同的HttpClient 4.x,除了它使用略有不同的4.x語法(見an example of that syntax)。換句話說,如果您將該示例中的「http」更改爲「https」,它將完美工作。如果你在看this tutorial,我可以理解你爲什麼會認爲它比需要更復雜。但是,只有當您嘗試訪問的站點的根證書不是JVM的接受證書時才需要這樣做。

但是,如果特殊事物與證書成爲必要,here是一個如何做到這一點的例子。坦率地說,我不知道如果你將它發送給一個未經驗證的證書,curl會做什麼,但我想至少你必須指定一些命令行選項來讓它忽略它。

究竟是什麼讓curl比HttpClient更容易處理cookie?

人們希望避免從命令行調用某些東西的主要原因是它使錯誤處理變得困難。如果命令在錯誤情況下結束,您只能打印出錯信息—或者可能對錯誤消息進行一些處理,並嘗試基於該錯誤消除異常,但是當您更改版本時,錯誤檢查代碼可能會失效。它還引入了一個外部依賴關係,您可能不希望隨附您的jar。另一方面,如果您使用HttpClient,它將根據問題的實際情況拋出異常,從而允許您對錯誤條件做出不同的響應。

編輯:對不起,以某種方式錯過了你已經在使用它的事實。以爲你正在使用基於JDK的東西。

+0

指向HttpClient 4.x可能會更好,因爲不再支持版本3。 – Bruno 2010-10-10 01:12:58

+0

+1爲推理重新:解析錯誤消息。 – 2010-10-10 01:53:32

0

嘗試Jetty + SSL

不完全是直線前進,但證據充分的和它的作品。

+1

Jetty是一個服務器,從我所知道的情況來看,這只是設置SSL的指南,而問題是「向https:// url提出請求的最佳方式是什麼?」 – Thomas 2010-10-10 17:06:24

+0

Jetty有一個HTTPClient實現,可以實現SSL - http://docs.codehaus.org/display/JETTY/Jetty+HTTP+Client – Chris 2010-10-10 17:24:01

+0

啊,我沒有在鏈接的文章中看到。 – Thomas 2010-10-10 21:31:26