2010-09-26 127 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