2010-05-04 46 views
1

我已經編寫了一個Python應用程序,該應用程序使用urllib2庫進行web請求,之後它會擦除數據。我可以將它部署爲一個Web應用程序,這意味着所有的urllib2請求都會通過我的Web服務器。這導致服務器的IP由於許多用戶的大量Web請求而被禁止的危險。另一種選擇是創建一個我不想做的桌面應用程序。有什麼辦法可以部署我的應用程序,以便我可以通過客戶端獲得我的web請求。一種方法是使用Jython創建一個applet,但我已經讀過Java applet只能向部署它的服務器發出web請求,並且規避這種情況的唯一方法是創建一個服務器端代理,它將我們帶回到服務器的IP被禁止的問題。從客戶端使用Python進行urllib請求

這可能聽起來像是和不可能的情況,我最終可能會創建一個桌面應用程序,但我想問問是否有人知道備用解決方案。

謝謝。

回答

1

您可以使用已簽名的Java小程序,他們可以使用Java安全機制來啓用對任何站點的訪問。 本教程正確地解釋了您必須執行的操作:http://www-personal.umich.edu/~lsiden/tutorials/signed-applet/signed-applet.html

從Flash小程序也可能做到這一點。 Javascript也僅限於發佈的網站,不允許被簽名或像這樣的安全例外AFAIK。

+0

你好。這似乎工作。乾杯。 – 2010-05-05 06:50:50

1

您可能可以使用由JavaScript構成的AJAX請求,這些請求是客戶端的一部分。

  • 使用服務器→客戶端通信下達命令和必要的數據,以請求
  • ...和使用AJAX通信從客戶機到第三方服務器即可。
+0

不幸的是,AJAX的意思是放棄JavaScript的Python,但這是將流量卸載到客戶端的唯一明智的方式。 – 2010-05-04 08:09:26

+0

其實我有使用Silverlight + DLR + IronPython在客戶端運行python的經驗。但是這意味着客戶端應該安裝Silverlight。所以最好堅持JavaScript。畢竟,一旦你接受這個想法,JS並不是那麼糟糕的語言。 – nkrkv 2010-05-04 08:18:08

+0

我試過在網上查找這個,但大多數人都說JS不支持跨站請求。這也被使用服務器端代理所規避。沒有代理服務器的方法嗎? – 2010-05-04 08:52:58

0

這取決於「刮痧」的形式,你打算做:

  • 您可能會遇到運行AJAX調用到第三方網站的問題。請參閱Screen scraping through AJAX and javascript
  • 另一種方法是在服務器端做,但要緩存結果,以免不必要地擊中第三方服務器。

看看google代碼上的diggstripper。