Http协议与请求
Post请求
- Post请求与Get请求的区别
- Get请求的参数是直接放在url后面的,而Post请求是放在请求体中的
- Get请求参数的长度会根据浏览器的不同实现有一定限制,而Post请求参数长度没有限制
- Get请求方便测试,直接输入地址即可,而Post请求不方便测试,需要借助代码或者工具进行发送
- Get请求和Post请求没有本质的区别,只是定义上的区别,比如如果你非要将get方式的参数放在请求体中,那么服务器也是可以接收处理的,同样,你也可以将post方式的参数拼在url后面
- Post请求的使用场景
- 使用Post请求上传键值对
- 使用Post请求上传json串
- 使用Post请求上传单个文件
- 使用Post请求上传多个文件
-
使用Post方法上传键值对,代码如下:
public void asyncPost(String url,HashMap<String, String> params,TextHttpResponseHandler responseHandler){ RequestParams requestParams = new RequestParams(params); asyncHttpClient.post(url, requestParams, responseHandler); } /** * post提交key-value * @param url2 */ private void postKeyValue(String url) { HashMap<String, String> params = new HashMap<String, String>(); params.put("username", "俊哥"); params.put("password", "111"); HttpHelper.get().asyncPost(url, params, new TextHttpResponseHandler() { @Override public void onSuccess(int arg0, Header[] arg1, String text) { tv_result.setText(text); } @Override public void onFailure(int arg0, Header[] arg1, String arg2, Throwable arg3) { } }); }
-
使用Post方式上传文件,代码如下:
public void asyncUploadFile(String url, String key, File file,TextHttpResponseHandler responseHandler) { RequestParams requestParams = new RequestParams(); try { requestParams.put(key, file); asyncHttpClient.post(url,requestParams , responseHandler); } catch (FileNotFoundException e) { e.printStackTrace(); } } private void uploadFile() { try { File file = new File(Environment.getExternalStorageDirectory()+"/dog.jpg"); HttpHelper.get().asyncUploadFile(upload, "file", file, new TextHttpResponseHandler() { @Override public void onSuccess(int arg0, Header[] arg1, String text) { tv_result.setText(text); } @Override public void onFailure(int arg0, Header[] arg1, String arg2, Throwable arg3) { } }); } catch (Exception e) { e.printStackTrace(); } }
- Post请求相关注意事项:
- 传递中文参数问题,Get请求同样需要注意,需要对url进行编码,对应的类有URLEncoder和URLDecoder,否则会乱码,当然很多第三方http库已经处理该问题
- 常见Content-Type定义:
- 普通文本:text/plain
- 表单键值对:application/x-www-form-urlencoded
- 文件数据:application/octet-stream
- json数据:application/json
- xml数据:text/xml
Android中常见编码Base64和URL编码
-
URL编码:http协议中请求的url不支持中文和特殊字符(如&?),所以需要对url进行编码和解码,编码使用的是URLEncoder,解码使用的是URLDecoder