-2
我想爲polipo http代理編寫一個簡單的魷魚式重定向器,如指定的in the documentation。polipo的魷魚式外部重定向器不起作用
下面是代碼:
#!/usr/bin/python
# based on
# http://gofedora.com/how-to-write-custom-redirector-rewritor-plugin-squid-python/
import sys
def modify_url(line):
l = line.split(" ")
old_url = l[0]
new_url = "\n"
if "experts-exchange" in old_url:
new_url = "http://127.0.0.1/" + new_url
return new_url
while True:
line = sys.stdin.readline().strip()
new_url = modify_url(line)
sys.stdout.write(new_url)
sys.stdout.flush()
當運行Polipo即可使用此重定向器和試圖訪問http://www.experts-exchange.com/,我得到以下錯誤:
500 Couldn't test for forbidden URL: Redirector error
其實,我得到同樣的錯誤嘗試時訪問任何URL,這使我認爲這是我的重定向器代碼的問題。
在Polipo即可日誌輸出並沒有提供更多的提示,我看到的有:
Redirector returned incomplete reply.
我在做什麼錯?
編輯:我修復了modify_url()返回值,因爲它沒有。我仍然遇到同樣的錯誤。
我錯過了modify_url()的返回值。我已經修復了這個問題(請參閱上面編輯的代碼),但我仍然得到相同的錯誤。重定向程序是可執行的並且可讀(我爲了測試目的而以root身份運行polipo,但是一旦我重定向器工作就會改變它),文件系統沒有noexec標誌。我不明白你關於手動運行的說法。重定向器應該被polipo調用。如果python方法沒有顯式返回,那麼它是可以的,它們默認返回AFAIK。 – Daylight 2011-03-25 15:38:45
@Daylight:我已經通過apt-get install polipo安裝polipo到我的ubuntu 10.10盒子,並複製粘貼上面的編輯過的代碼。我已經修改了文件,打開了/ etc/polipo/config並添加了「redirector = /home/cem/redirect.py」(沒有引號)並執行了sudo服務polipo restart。我修改我的Firefox使用代理(本地主機:8123),並嘗試你的網址和另一個。它按預期工作,所以這裏沒有錯,我想你錯過了一些東西。 :) – 2011-03-25 19:30:53
@Daylight手動運行意味着:Squid(或polipo)執行多個實例(squid上的redirect_children X),並通過標準輸入將具有預定義格式的查詢傳遞給它們。所以,正如你已經知道的,你只需要從標準輸入讀取並通過標準輸出返回。如果手動運行重定向器,則需要爲重定向器提供假定的輸入並等待合理的輸出。假設的輸入就像http://experts-exchange.com 1.1.1.1/experts-exchange.com - GET - 你期望得到127.0.0.1。順便說一句,你是對的返回,但sys.stdout.write(無)導致TypeError;) – 2011-03-25 19:40:17