2010-01-11 79 views
8

很多時候我想自動化http查詢。我目前使用Java(和普通的http客戶端),但可能更喜歡基於腳本的方法。一些非常快速和簡單的事情。在哪裏我可以設置標題,轉到一個頁面,而不用擔心設置整個OO生命週期,設置每個標題,調用一個html解析器......我正在尋找任何語言的解決方案,優選腳本更有效地腳本HTTP

+8

你得到了一個答案霰彈槍,因爲實際上有很多很好的產品在這個空間,爲不同的用例而設計。你爲什麼想要自動化HTTP查詢?你在做什麼?你是否曾經*需要在請求中設置任何HTTP頭部,或者在響應中查看頭部?默默遵循重定向總是可以的,或者你需要了解它們嗎?你需要像DOM和JavaScript這樣的瀏覽器功能嗎?等等 – 2010-01-11 17:03:59

+0

它有所不同。在家裏,我有時會看到某些事情自動化的一點(但不像firefox宏),我一直很喜歡和httpbots打交道。我的第一個節目是蜘蛛。在工作中,我們確實需要一些http單元測試。至於答案,是的,這將是一個很好的閱讀幾天。 – Zombies 2010-01-11 18:47:34

+0

這可以變成一個維基?真的沒有一個可以接受的答案。 – Zombies 2010-01-27 18:27:30

回答

0

怎麼樣使用PHP + Curl,或者只是bash?

2

的Python urllib可能是你在找什麼。

或者PowerShell中暴露了一個腳本環境完整的.NET HTTP庫。

+0

通常,人們比urllib需要更多的urllib2。 – 2010-01-11 16:48:34

6

看一看Selenium。如果需要自定義腳本,它將爲C#,Java,Perl,PHP,Python和Ruby生成代碼。

+0

生成的代碼中,它們使用了哪些http庫?默認的或像機械化的? – Zombies 2010-01-11 16:40:46

+0

Selenium爲每種語言都有一個包裝庫。 – jbochi 2010-01-11 16:49:54

+1

就我所瞭解的Selenium而言,它使用了像Firefox這樣的完全跳轉的瀏覽器。這在我看來就像用核彈殺死老鼠一樣。 – johannes 2010-01-11 17:47:57

6

的Watir聽起來接近你想要儘管它(如硒在另一個答案鏈接)什麼是真正打開了一個瀏覽器做的東西。你可以看到一些例子here。另一種基於瀏覽器的記錄+回放方法系統是sahi

如果您的應用程序是使用WSGI,然後paste是一個不錯的選擇。

在另一個答案中鏈接的機械化是「庫中的瀏覽器」,並有perl,RubyPython中的克隆。 Perl一個是原來的,這似乎是要走的路,如果你想要一個瀏覽器。這種方法的問題是所有的前端代碼(可能依賴於JavaScript)都不會被執行。

+0

用於java的httpunit是否執行JavaScript? – Zombies 2010-01-11 16:32:37

+0

另外,當它打開瀏覽器....它會成爲一個活動窗口和操縱點擊/事件? – Zombies 2010-01-11 16:33:57

+0

從未使用過它。除非涉及瀏覽器(或者以某種方式加載JS解釋器),否則我認爲不會。 – 2010-01-11 16:34:00

6

輪到我了:wget的或Perl與lwp。您會在鏈接頁面上找到示例。

3

取決於你在做什麼最簡單的解決方案看起來是bash的+捲曲。

後者的手冊頁,請訪問:

http://curl.haxx.se/docs/manpage.html

你可以做的職位,以及得到,HTTPS,顯示頭,與Cookie的工作,基本通過所有的Digest HTTP認證,隧道各種代理服務器,包括NTLM on * nix等等。

捲曲也可作爲與C和PHP支持共享庫。

HTH

C.

4

我測試的REST API的那一刻,發現ReST Client很不錯。這是一個GUI程序,但是您可以將查詢保存並恢復爲XML文件(或者讓它們生成),嵌入,編寫測試腳本等。它基於Java(這不是特別的優勢,但你提到了它)。

記錄會話的減點數。 ReST客戶端適用於無狀態的「單次鏡頭」。

如果它不適合您的需求,我會去提及已經提到的機械化(或WWW-Mechanize,因爲它是在CPAN中稱爲)。

2

Twill是相當不錯的,並進行測試。它可以用作腳本,交互式會話或Python程序中。

6

如果您有簡單的需求(抓取頁面然後解析它),很難擊敗LWP::SimpleHTML::TreeBuilder

use strict; 
use warnings; 

use LWP::Simple; 
use HTML::TreeBuilder; 

my $url = 'http://www.example.com'; 
my $content = get($url) or die "Couldn't get $url"; 

my $t = HTML::TreeBuilder->new_from_content($content); 
$t->eof; 
$t->elementify; 

# Get first match: 
my $thing = $t->look_down(_tag => 'p', id => qr/match_this_regex/); 

print $thing ? $thing->as_text : "No match found\n"; 

# Get all matches: 
my @things = $t->look_down(_tag => 'p', id => qr/match_this_regex/); 

print $_ ? $_->as_text : "No match found" for @things; 
+0

Yup,LWP和HTML :: TreeBuilder通常會一起使用。 – 2010-01-11 18:05:18

+0

@Leonardo,就像巧克力和花生醬一樣 - 不錯,但更好。 – daotoad 2010-01-12 03:21:59

2

Perl和WWW::Mechanize可以使網頁抓取等簡單和容易,包括易於操作的形式(假設你想要去到登錄頁面,在用戶名和密碼填寫並提交表單,處理Cookie /隱藏的會話標識符就像瀏覽器一樣...)

同樣,從提取的頁面查找或提取鏈接也很簡單。

如果您需要解析WWW :: Mechanize無法輕鬆幫助的結果頁面中的內容,請將結果提供給HTML::TreeBuilder以使解析變得容易。