2011-03-25 66 views
-2

我想爲polipo http代理編寫一個簡單的魷魚式重定向器,如指定的in the documentationpolipo的魷魚式外部重定向器不起作用

下面是代碼:

#!/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()返回值,因爲它沒有。我仍然遇到同樣的錯誤。

回答

1

該網站(gofedora)提到您需要返回一個空白行或modify_url中的修改後的網址以使其正常工作。如果你手動運行,你也會看到錯誤。你的解決方案是在modify_url結尾處返回new_url。

請注意,您還需要chmod + x以允許您的代理運行腳本。

+0

我錯過了modify_url()的返回值。我已經修復了這個問題(請參閱上面編輯的代碼),但我仍然得到相同的錯誤。重定向程序是可執行的並且可讀(我爲了測試目的而以root身份運行polipo,但是一旦我重定向器工作就會改變它),文件系統沒有noexec標誌。我不明白你關於手動運行的說法。重定向器應該被polipo調用。如果python方法沒有顯式返回,那麼它是可以的,它們默認返回AFAIK。 – Daylight 2011-03-25 15:38:45

+0

@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

+0

@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