关于http请求中使用NameValuePair遇到的坑
学习http请求中遇到的坑
- 场景
- 使用的pom.xml
场景
实现某APP的自动登录进行一些登陆后查看用户信息,因为登陆需要输入验证码,本人的能力有限,自己写不出来提取图片验证码信息的功能,只能调用别人的API实现了。
使用的pom.xml
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.55</version>
</dependency>
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version>
</dependency>
<dependency><groupId>com.wade</groupId><artifactId>util</artifactId><version>1.0-SNAPSHOT</version>
</dependency>
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.3.5</version>
</dependency>
一开始写的时候用的不是这个httpclient,用的是下面这个,在使用过程中出现了问题,而且个人感觉api使用起来很不方便,所以就换成了org.apache.httpcomponents.httpclient 。
<dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version>
</dependency>
从这里面遇到的坑:
- 先看下代码
List<NameValuePair> urlParameters = new ArrayList<>();
urlParameters.add(new BasicNameValuePair("name", this.name));
urlParameters.add(new BasicNameValuePair("password", this.password));
urlParameters.add(new BasicNameValuePair("rememberMe", REMEMBER_ME));
urlParameters.add(new BasicNameValuePair("verifyCode", codeBase64.get("verifyCode").toString()));
urlParameters.add(new BasicNameValuePair("verifyCodeToken", codeBase64.get("verifyCodeToken").toString()));
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(urlParameters);
首先上面的这一段是在发送httppost请求的时候携带的参数,使用NameValuePair只是一个简单的key-value,形式单一,而且局限性会比较大,这里携带的参数要求必须拼接成符合json格式的字符串才可以,用UrlEncodedFormEntity来装载的参数却不能满足这个要求,会报415 Unsupported Media Type 错误,但是对于一个面向Google编程的小白来说,都不是事;查了一下,都说是没有指定请求头的Content-Type:application/json;charset=UTF-8,加上就没问题的,然而加上了之后,请求还是报了400的错误。后来想想这个只是说明请求体内容是json,但是实际上并不符合json格式也没有用啊!所以就用了下面的写法:
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", this.name);
jsonObject.put("password", this.password);
jsonObject.put("rememberMe", REMEMBER_ME);
jsonObject.put("verifyCode", codeBase64.get("verifyCode").toString());
jsonObject.put("verifyCodeToken", codeBase64.get("verifyCodeToken").toString());
post.setEntity(new StringEntity(jsonObject.toString(), HTTP.UTF_8));
注:有点忙,先记录到这里,后续再补充,不会用makedown,有点丑,请见谅。
关于http请求中使用NameValuePair遇到的坑相关推荐
- 异步请求中jetty处理ServletRequestListener的坑
标题起得比较诡异,其实并不是坑,而是jetty似乎压根就没做对异步request的ServletRequestListener的特殊处理,如果文中有错误欢迎提出,可能自己有所疏漏了. 之前遇到了一个b ...
- 【2012百度之星/资格赛】H:用户请求中的品牌 [后缀数组]
时间限制: 1000ms 内存限制: 65536kB 描述 馅饼同学是一个在百度工作,做用户请求(query)分析的同学,他在用户请求中经常会遇到一些很奇葩的词汇.在比方说"johnsonj ...
- postman简单教程,如何在请求中引用上次请求返回的值
做接口测试,一定会遇到这种情况,需要拿上次请求的值在本次请求中使用,比如,我们去测试一个东西,要去登录才能做其他的操作,需要拿到登录返回数据中的某些字段,比如,token啊等... 如果发一次请求,就 ...
- vue.js与ajax删除,javascript - VueJs和VueResource,从Ajax请求中删除标头字段 - 堆栈内存溢出...
当实例化Vuejs (2.2.6)和Vue-resource (1.2.1)时 ,我使用以下代码设置标头授权,通过这种方式,我可以将所有请求授权给我的API: Vue.http.headers.com ...
- java获取jsp页面参数_jsp页面中获取servlet请求中的参数方法总结
jsp页面中获取servlet请求中的参数的办法详解 在JAVA WEB应用中,如何获取servlet请求中的参数,并传递给跳转的JSP页面?例如访问http://localhost:8088/bbs ...
- post传值php取不到数据,post请求中的参数形式和form-data提交数据时取不到的问题...
@Controller 页面form表单请求时不会丢数据 返回json数据时需要加 注解@ResponseBody 请求格式如下 @ResponseBody public Object login(S ...
- SpringMVC无法获取请求中的参数的问题的调查与解决(1)
SpringMVC无法获取请求中的参数的问题的调查与解决(1) 参考文章: (1)SpringMVC无法获取请求中的参数的问题的调查与解决(1) (2)https://www.cnblogs.com/ ...
- PHP cURL可以在单个请求中检索响应标头和正文吗?
本文翻译自:Can PHP cURL retrieve response headers AND body in a single request? Is there any way to get b ...
- 获取烧瓶请求中收到的数据
本文翻译自:Get the data received in a Flask request I want to be able to get the data sent to my Flask ap ...
最新文章
- 自定义cacti插件监控jvm
- 通过页面埋点做监控却不影响性能?解密ARMS前端监控数据上报技术内幕
- poj 1236 Network of Schools
- linux 挂起 移动电脑,linux 系统挂起
- greensock包使用
- ASP.NET Web 页面生命历程中的一天
- Bootstrap表格样式
- ViedoUtil获取视频的缩略图
- 想成为高薪的Java架构师该如何做?
- HTML:H5新特性
- java浪漫代码_30条代码,拿去“表白”
- 华为NP课程笔记21-QoS服务模型
- 现代通信技术课程小结
- 自动驾驶——为什么需要仿真?
- 计算机网络国家职业三级,计算机网络管理员国家职业标准
- java文件下载文件损坏_java上传并下载以及解压zip文件有时会报文件被损坏错误分析以及解决...
- android模拟器没反应,Android模拟器无法正常工作
- java 取一个数的各个位数
- 深圳“毕业”生灵活就业社保缴纳方式
- 什么副业能让你的收入增长十倍?