2013-05-27 48 views
0

我試圖用python http.client訪問我本地的TWiki安裝。出於某種原因,我總是以403 Forbidden結束。我可以訪問我的服務器中的其他子文件夾,但不能twiki。我可以用curl訪問這個TWiki頁面。使用python http.client訪問/ bin /或/ cgi-bin /文件夾時是否需要執行某些特殊操作?使用Python訪問TWiki頁面http.client

這裏是例如與twiki.org頁面,因爲我的本地主機不能訪問外:

>>> import httplib 
>>> conn = httplib.HTTPConnection("twiki.org") 
>>> conn.request("GET", "/cgi-bin/view/") 
>>> r1 = conn.getresponse() 
>>> print r1.status, r1.reason 
403 Forbidden 
>>> data1 = r1.read() 
>>> data1 
'<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">\n<html><head>\n<title>403 Forbidden</title>\n</head><body>\n<h1>Forbidden</h1>\n<p>You don\'t have permission to access /cgi-bin/view/\non this server.</p>\n<hr>\n<address>Apache/2.2.3 (CentOS) Server at twiki.org Port 80</address>\n</body></html>\n' 
>>> 

回答

1

我只是嘗試這樣做我自己,我發現,設置User-Agent頭似乎解決它。它似乎沒有什麼重要的頭球被,只是它被設置:

>>> import httplib 
>>> conn = httplib.HTTPConnection("twiki.org") 
>>> conn.request("GET", "/cgi-bin/view/", headers={"User-Agent": "foo"}) 
>>> r1 = conn.getresponse() 
>>> print r1.status, r1.reason 
200 OK 

可惜我不能闡明瞭爲什麼TWiki的返回403沒有User-Agent頭任何光 - 我只是想它的這是客戶之間可能存在的差異之一。我認爲這就像它試圖決定是否返回該網站的移動版本這一事實一樣,但沒有優雅地處理沒有標題的情況真的很差。

但是,希望至少能爲您提供解決方法。

EDIT

顯然,這是使用BrowserMatchNoCase指令來設置一個環境變量blockAccess這大概是拿起後返回所觀察到的響應403 Forbiddendefault Apache config的一部分。

他們似乎認爲這樣可以防止DoS攻擊不知何故,雖然我對任何可以通過周圍簡單地設置一個隨機User-Agent字符串的工作非常不服氣。正如你從配置中可以看出的那樣,他們也有一系列他們試圖阻止的「已知壞」用戶代理。您可以嘗試使用其中的一條命令行來獲取觀察此:

$ GET -Ssed -H "User-Agent: some-random-name" http://twiki.org/cgi-bin/view/ 
GET http://twiki.org/cgi-bin/view/ 
200 OK 
[...] 
$ GET -Ssed -H "User-Agent: FAST" http://twiki.org/cgi-bin/view/ 
GET http://twiki.org/cgi-bin/view/ 
403 Forbidden 
[...] 

我敢肯定,他們有他們這樣做的原因,但我必須說,我沒有什麼印象。

+0

是的,這有助於我繼續我的腳本。謝謝。 – Peetu