关闭

Http协议网络请求java方式

标签: httphttp网络请求网络请求
505人阅读 评论(0) 收藏 举报
分类:

HTTP(超文本传输协议)消息:客户端请求,服务器响应


主要请求方式:
GET:数据附在url后面,数据量小,安全性差。

POST:数据量大,支持各种数据类型,安全性高,服务器先接受数据长度再接收内容。


主要用到的以下类:

URL url = new URL("httpurl");//得到url实例,,URL是特殊的URI 统一资源定位符,URI 资源标识符

HttpConnection con = url.openConnectoin();//通过httpurl 得到HttpConnection 实例

con.setRequestMethod("");//设置请求状态,GET/POST/HEAD/PUT/DELETE/TRACE/CONNECT/OPTIONS

con.connect();//建立连接

con.getResponseCode;//返回得到响应状态,int值

通过con.get...可以得到输入输出流,能够像服务器传送数据并得到响应信息;

con.disconnect; 断开连接


使用:

网络请求是耗时操作,所以不能放在主线程中,可以使用handler或者异步任务

<span style="font-size:14px;">new AsyncTask<String, Void, String>() {
				@Override
				protected String doInBackground(String... params) {
					return buildHttpConnect(params[0]);//封装的方法
				}

				/*得到响应数据的处理,赋给textView */
				@Override
				protected void onPostExecute(String result) {
					mShowTxt.setText(result);

				};
			}.execute(httpUrl);</span>

通过传入目标url建立连接

	private String buildHttpConnect(String url) {
		try {
			/* get请求传参方式url=url +"?user=admin&psw=123"  get处理中文乱码,可以调用URLEncoder.encode("params","UTF-8")*/
			URL httpUrl = new URL(url);
			HttpURLConnection connection = (HttpURLConnection) httpUrl
					.openConnection();
			connection.setRequestMethod("POST");
			connection.setReadTimeout(10000);
			connection.setConnectTimeout(5000);
			connection.connect();
			
			/* post请求 传参方式)(post参数中文乱码,在服务器req.setContentType("text/html;charset=UTF-8");) */
			OutputStream os = connection.getOutputStream();
			PrintWriter writer = new PrintWriter(os);
			writer.print("user=admin&psw=123");
			writer.flush();

			/* 读取服务器响应内容 */
			InputStream is = connection.getInputStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					is, "UTF-8"));

			StringBuilder builder = new StringBuilder();
			String str;
			while ((str = reader.readLine()) != null) {
				builder.append(str);
			}

			return builder.toString();

		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{//"关流",断开连接<span style="font-family: Arial, Helvetica, sans-serif;">}</span>
<span style="font-size:14px;">		return null;
	}</span>

客户端中文乱码:

get请求中可以使用URLEncoder这个工具类,URLEncoder.encode("","UTF-8");

post请求中,可以在服务器那端设置 request.setContentType("text/html;charset=UTF-8");

响应乱码;

1.在new InputStreamReader(inputstream,"UTF-8")中可以指定他的编码

2.在服务端中设置 response.setCharset("UTF-8");

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:33809次
    • 积分:834
    • 等级:
    • 排名:千里之外
    • 原创:51篇
    • 转载:5篇
    • 译文:0篇
    • 评论:12条
    最新评论