簡體   English   中英

使用Python http.client訪問TWiki頁面

[英]Accessing TWiki page with Python http.client

我正在嘗試使用python http.client訪問本地TWiki安裝。 由於某種原因,我總是以403 Forbidden告終。 我可以訪問服務器中的其他子文件夾,但不能訪問twiki。 我可以通過curl訪問此TWiki頁面。 使用python http.client訪問/ bin /或/ cgi-bin /文件夾時,您需要做些特別的事情嗎?

這是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'
>>> 

我自己嘗試了一下,發現設置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在沒有User-Agent標頭的情況下返回403的原因-我只是根據它是客戶端之間可能存在的差異之一嘗試了它。 我認為這類似於事實,即它試圖確定是否返回該網站的移動版本,但是如果不能優雅地處理沒有標題的情況,那確實很糟糕。

希望至少可以為您提供一種解決方法。

編輯

顯然,這是其默認Apache配置的一部分,該配置使用BrowserMatchNoCase指令來設置環境變量blockAccess ,該環境變量可能稍后被獲取,以返回觀察到的403 Forbidden響應。

他們似乎認為這可以以某種方式阻止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
[...]

我確定他們有這樣做的理由,但是我必須說,我沒有留下深刻的印象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM