2012-08-17 31 views
6

我使用DjangoS3Boto每當簽名具有'+'跡象在裏面,我得到一個403 Forbidden。如果簽名中沒有'+'登錄,我就可以獲得資源。這裏有什麼可能是錯的?亞馬遜S3的Python S3Boto 403禁止當簽名具有「+」號

UPDATE:

回購是:https://github.com/boto/boto

有關文件是:

boto/utils.py 
boto/s3/connection.py 

注: 我很新到Python。我嘗試修改代碼,但仍然無法正確完成編碼。

+2

我不熟悉S3Boto,但我的直覺會是這樣不獲取URL正確編碼,所以+是越來越解碼的空間。 – 2012-08-17 13:55:18

+0

這是我創建的問題:https://github.com/boto/boto/issues/916。如果您想查看代碼,請複製回購並查看generate_url方法中的boto.s3.connection。這似乎是編碼完成的地方。我做了這個,但我找不到錯誤的地方T_T – yretuta 2012-08-17 14:02:08

回答

3

我在時間有點短(因爲它是凌晨1:30),所以很遺憾,我沒有對你的代碼示例,但我相信這是因爲在URL中值+應進行編碼。所以從GitHub,您的網址...

https://s3.amazonaws.com/dragonflysco/static/js/plugins/blockui.js?Signature=+tahbTacs5Vkzt5jQ+hZULzGPhE=&Expires=1345019173&AWSAccessKeyId=AKIAJNCPYIZVZXKOPCHA 

確實應該

https://s3.amazonaws.com/dragonflysco/static/js/plugins/blockui.js?Signature=%2BtahbTacs5Vkzt5jQ+hZULzGPhE=&Expires=1345019173&AWSAccessKeyId=AKIAJNCPYIZVZXKOPCHA 

(注:我更換了與+%2B)

http://www.w3schools.com/tags/ref_urlencode.asp

要解決代碼中,我將在其中構建URL查詢字符串的地方添加一個URLEncoding函數。

+0

然而,我正在使用一個插件,我試圖挖掘該插件的來源,但我找不到編碼簽名並提出請求的代碼。如果你看看上面的評論,我已經創建了這個問題,並嘗試在某些地方更改編碼,但無濟於事。 – yretuta 2012-08-22 10:18:32