用浏览器测试Get与Post Webservice,Post一直报405错误,而Get能够成功的原因与解决方法

楼主在用Jersey开发Restful Webservice的时候碰到了这样一个问题

同样一个方法实现,用@get定义和@post定义,@get能通过测试,而@post不能

	@GET  //@POST
	@Path("/getUser")
	@Produces("application/json")   //@Consumes(application/x-www-form-urlencoded)
	public String getUserById(@QueryParam("loginID") String loginID) throws Exception {
		String users = null;
		CVCUserDAO dao = new CVCUserDAO();
		ArrayList<User> datas = dao.getUsers(loginID);
		Gson gson = new Gson();
		users = gson.toJson(datas);

		return users;
		// return "Hello World";
	}

  从来我以为get和post只是一种规范,好吧。。。从某种程度上,是的。

但是当使用浏览器去测试它的时候,就不是了

通过浏览器的地址栏输入地址,所访问的URL都是get请求,因此如果以post定义方法,那么由于请求与实现的不一致,会返回405错误,method not allowed,  The specified HTTP method is not allowed for the requested resource.

这归根到底是因为浏览器发送了get请求,而方法只能处理post请求,所以发生的错误

可能是这么问题太low了,我网上找了一大圈都没有找到答案,最后在stackoverflow上找到了解答

http://stackoverflow.com/questions/25253972/put-jersey-error-405-method-not-allowed

他说的很好,如果想用浏览器做post的测试,那么就下一个chrome的postman插件,完美解决你的问题

最后从360Doc上找到了Get和Post请求的区别,贴在这里

1. 哪一些情况下,浏览器会发送get请求

a. 直接在浏览器地址栏输入某个地址

b. 点击链接

c. 表单默认的提交方式

2. 哪一些情况下,浏览器会发送post请求?

a. 设置表单method = "post"

3. get请求的特点

a. 请求参数会添加到请求资源路劲的后面,只能添加少量参数(因为请求行只有一行,大约只能存放2K左右的数据)(2K左右的数据,看起来也不少。。。)

b. 请求参数会显示在浏览器地址栏,路由器会记录请求地址

4. post请求的特点

a. 请求参数添加到实体内容里面,可以添加大量的参数(也解释了为什么浏览器地址栏不能发送post请求,在地址栏里我们只能填写URL,并不能进入到Http包的实体当中)

b. 相对安全,但是,post请求不会对请求参数进行加密处理(可以使用https协议来保证数据安全)。

时间: 2024-08-01 22:22:14

用浏览器测试Get与Post Webservice,Post一直报405错误,而Get能够成功的原因与解决方法的相关文章

WebService &quot;因 URL 意外地以 结束,请求格式无法识别&quot; 的解决方法

问题出现的前提条件: 1.使用XMLHttpRequest向服务端发送请求,未正常返回信息 2.使用FireBug发现如标题所描述的问题 解决办法: 在WebConfig->system.web下添加webServices节点,入下所示 <webServices>          <protocols>              <add name= "HttpGet" />               <add name= "

经常遇到的浏览器的兼容性有哪些?原因?解决方法是什么?

PNG24位的图片在ie6浏览器上出现背景,解决方案是做成PNG8 浏览器默认的margin和padding不同.解决方案是加一个全局的*{margin:0;padding:0;} ie6双边距bug:块属性标签float后,又有横行的margin情况下,在IE6显示的margin比设置的大 IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义的属性:在FireFox下,只能使用getAttribute()获取自定义属性:解决方法:统一通过getA

.asmx支持post请求或者get请求调用(WebService &quot;因 URL 意外地以 结束,请求格式无法识别&quot; 的解决方法)

使用Post调用以asmx形式提供的webservice时,在本机调试没有调用问题.一旦部署至服务器后会提示如下信息: <html> <head> <title>因 URL 意外地以“/GetCertByToken”结束,请求格式无法识别.</title> <meta name="viewport" content="width=device-width" /> <style> body {fo

Python多线程Selenium跨浏览器测试

前言 在web测试中,不可避免的一个测试就是浏览器兼容性测试,在没有自动化测试前,我们总是苦逼的在一台或多台机器上安装N种浏览器,然后手工在不同的浏览器上验证主业务流程和关键功能模块功能,以检测不同浏览器或不同版本浏览器上,我们的web应用是否可以正常工作. browser.png 下面我们看看怎么利用python selenium进行自动化的跨浏览器测试. 什么是跨浏览器测试 跨浏览器测试是功能测试的一个分支,用以验证web应用能在不同的浏览器上正常工作. 为什么需要跨浏览器测试 通常情况下,

selenium + python 多浏览器测试

selenium + python 多浏览器测试 支持库包 在学习 Python + Selenium 正篇之前,先来看下对多浏览器模拟的支持.目前selenium包中已包含webdriver,help(webdriver) 查看其下package:也可以查看源文件        启动 Firefox firefox是selenium支持得比较成熟的浏览器,很多新的特性都会在firefox中体现.但是做页面的测试,启动速度比较慢,启动以后运行速度还是可以接受的.可直接启动firefox浏览器,参

2.5 webDriver的多浏览器测试

1.使用chrome进行测试. webdriver操作chrome浏览器的驱动程序:http://chromedriver.storage.googleapis.com/index.html 运行时,会有错误提示:unknown error: Runtime.executionContextCreated has invalid 'context' >>说明安装的chromedriver不是最新版,有可能导致与chrome浏览器版本不兼容而报如下错误 .如上截图中,跳转到父目录,下载最新的版本

【Python】详解Python多线程Selenium跨浏览器测试

前言 在web测试中,不可避免的一个测试就是浏览器兼容性测试,在没有自动化测试前,我们总是苦逼的在一台或多台机器上安装N种浏览器,然后手工在不同的浏览器上验证主业务流程和关键功能模块功能,以检测不同浏览器或不同版本浏览器上,我们的web应用是否可以正常工作. 下面我们看看怎么利用python selenium进行自动化的跨浏览器测试. 什么是跨浏览器测试 跨浏览器测试是功能测试的一个分支,用以验证web应用能在不同的浏览器上正常工作. 为什么需要跨浏览器测试 通常情况下,我们都期望web类应用能

10个免费的跨浏览器测试工具推荐

10个免费的跨浏览器测试工具推荐 在多个平台上测试多种流利器不但是很困难的——它几乎不可能的,因为没有那些好的测试工具.今天我们为大家提供很多涉及到浏览器测试的选择,并且告诉你那些“顶级的浏览器测试工具”,你应该使用哪一个… 这前10名的免费跨浏览器测试工具没有特定的顺序,因为他们对于任何特定的设备都有同样有效.如果你手动去测试,可能既困难又耗费时间.因为你只能不断的安装更多的浏览器在你的设备上. 1.Browsera Browsera可以测试和报告在您的网站上的跨浏览器而已的差异和脚本错误.B

盘点前 10 名的免费跨浏览器测试工具

原文: http://www.oschina.net/news/53246/free-cross-browser-testing-tools 在多个平台上测试多种浏览器不但是很困难的 – 它几乎不可能的,因为没有那些好的测试工具.今天,我们就为大家提供很多涉及到跨浏览器测试的选择,并且告诉你那些“顶级的浏览器测试工具”,你应该使用哪一个. 这前10名的免费跨浏览器测试工具没有特定的顺序,因为他们对于任何特定的设备都同样有效.如果你手动去测试,可能既困难又耗费时间.因为你只能不断的安装更多的浏览器