2013-08-21 79 views
5

我正在使用Ruby/Mechanize編寫「自動填寫表單」應用程序。它幾乎可以工作。如何配置Ruby Mechanize代理以通過Charles Web代理工作?

我可以使用精彩的Charles網頁代理來查看服務器和我的Firefox瀏覽器之間的交換。現在我想使用Charles來查看服務器和我的應用程序之間的交換。

Charles代理端口8888.假設服務器在https://my.host.com。有一件事不工作是:

@agent ||= Mechanize.new do |agent| 
    agent.set_proxy("my.host.com", 8888) 
end 

這導致Net::HTTP::Persistent::Error

...lib/net/http/persistent.rb:579:in `rescue in connection_for': connection refused: my.host.com:8888 (Net::HTTP::Persistent::Error) 

因此,要麼我給錯誤的主機參數agent.set_proxy(host, ...),或者我沒有正確配置查爾斯。 (FWIW,我曾經能夠做到這一點,但自從那些平靜的日子以來,Mechanize和Charles都已經成熟了好幾代......)

任何想法?

回答

10

網絡代理通常不是由定義的,只是的一個端口,但通常是一個完整的主機名。 Charles很可能安裝在本地主機上。因此,以下調整可能適用於您:

@agent ||= Mechanize.new do |agent| 
    agent.set_proxy("localhost", 8888) 
end 
+3

對於記錄,「tap」是不必要的,Mechanize.new會自動產生該塊。 – pguardiario

+0

謝謝 - 我應該意識到localhost是正確的。它幾乎可行 - 現在我所要做的就是讓我的'證書驗證失敗'錯誤照顧。不同的問題... –

+0

@pguardiario:謝謝你的提示。相應地編輯OP(和我的源代碼)。 –