为什么网络服务中的末尾斜杠如此重要?
我在用PHP和Python测试一个网络服务。这个网络服务的地址是,比如说,http://my.domain.com/my/webservice
。当我用PHP测试这个地址的时候,一切都很正常。但是,当我用Python和SOAPpy去访问同样的地址时,却出现了错误。
下面是我用来和这个网络服务沟通的Python代码:
from SOAPpy import WSDL
server = SOAPProxy('http://my.domain.com/my/webservice', namespace)
server.myFunction()
我从服务器收到的回应是:
HTTPError: <HTTPError 301 Moved Permanently>
我发现,如果在网络服务的地址后面加一个斜杠,它就能正常工作了!
from SOAPpy import WSDL
server = SOAPProxy('http://my.domain.com/my/webservice/', namespace)
server.myFunction()
那么,为什么没有这个斜杠会导致错误呢?
5 个回答
3
因为实际的服务器网址是:http://my.domain.com/my/webservice/
这个PHP库默认是会自动跟随网址的重定向的。
3
这个错误是301重定向,意思是你的请求被网站服务器转到一个后面有斜杠的URL上。
看起来PHP会自动跟随这个重定向,所以不会报错,而Python则不会。你需要做以下几步:
- 先尝试连接最初的URL
- 捕捉任何301重定向,可能还有302重定向
- 如果有重定向,就尝试连接那个新的URL。
新的URL应该可以在响应的头信息中找到。
希望这对你有帮助。
20
这两个网址是不一样的。http://my.domain.com/my/webservice
这个网址表示在 my
文件夹里有一个叫 webservice
的文件。而 http://my.domain.com/my/webservice/
这个网址则表示在 my/webservice
文件夹里有一个默认的文档。
很多网络服务器会自动把这种网址纠正过来,但这并不是它们必须要做的事情。