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();
}
}
常见Content-Type的类型:
普通文本:text/plain
表单键值对:application/x-www-form-urlencoded
文件数据:application/octet-stream
json数据:application/json
xml数据:text/xmlPost请求相关注意事项:
传递中文参数问题,Get请求同样需要注意,需要对url进行编码,对应的类有URLEncoder和URLDecoder,否则会乱码,当然很多第三方http库已经处理该问题