2010-09-26 42 views

回答

7

在HTTP協議中,片段(從#開始)不會通過網絡發送到服務器:它在本地由瀏覽器保留,並在服務器的響應完全收到後用於以某種方式「視覺定位」確切點在頁面顯示爲「當前」(例如,如果返回的頁面是在HTML中,這將通過解析HTML並尋找第一個合適的標誌來完成)。

所以,程序是:去除片段,例如通過urlparse.urlparse;使用其餘的來獲取資源;根據服務器響應的內容類型標題適當地解析它;然後根據在解析資源中找到您在第一步中保留的片段,採取您的程序在資源上的「當前點」上執行的任何視覺操作。

+0

非常感謝!還有一個問題,如果我使用「post」方法通過urlopen方法直接與服務器通信,我會得到一個響應url,例如「http:// localhost/new-post#comment-29」(例如,在提交評論時) ,那麼它就是404.如果我想繞過這個問題,我可以使用什麼替代方法,或者是否有一些參數來控制整個過程? – Shane 2010-09-26 15:50:05

+0

@Shane,你需要在URL的路徑和查詢被髮送到服務器之前刪除片段 - 你可以爲此目的構建一個花哨的開啓者,但我只是建議直接做。無論你使用GET還是POST都沒有區別。 – 2010-09-26 15:59:06

+0

嗯,我不認爲我有控制權,我的意思是,以評論提交爲例,通常我會這樣編碼:Req = urllib2.Request(「http:// localhost/wp-comments-post。 php「,Data,Header); Response = urllib2.urlopen(Req);我總是得到404,而評論仍然顯示出來,我知道它一定是「#」問題,但我不知道如何停止整個過程,並刪除「#」,所以它不會再提高404 。那麼,我該如何做到這一點? – Shane 2010-09-26 16:05:03

相關問題