1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
/**
* 以get方式向服务端发送请求,并将服务端的响应结果以字符串方式返回。如果没有响应内容则返回空字符串
*
* @param url 请求的url地址
* @param params 请求参数
* @param charset url编码采用的码表
* @return
*/
public
static
String getDataByGet(String url,Map
{
if
(url ==
null
)
{
return
;
}
url = url.trim();
URL targetUrl =
null
;
try
{
if
(params ==
null
)
{
targetUrl =
new
URL(url);
}
else
{
StringBuilder sb =
new
StringBuilder(url+?);
for
(Map.Entry
{
// 解决请求参数中含有中文导致乱码问题
sb.append(me.getKey()).append(=).append(URLEncoder.encode(me.getValue(),charset)).append(&);
}
sb.deleteCharAt(sb.length()-
1
);
targetUrl =
new
URL(sb.toString());
}
Log.i(TAG,get:url----->+targetUrl.toString());
//打印log
HttpURLConnection conn = (HttpURLConnection) targetUrl.openConnection();
conn.setConnectTimeout(
3000
);
conn.setRequestMethod(GET);
conn.setDoInput(
true
);
int
responseCode = conn.getResponseCode();
if
(responseCode == HttpURLConnection.HTTP_OK)
{
return
stream2String(conn.getInputStream(),charset);
}
}
catch
(Exception e)
{
Log.i(TAG,e.getMessage());
}
return
;
/**
* 以post方式向服务端发送请求,并将服务端的响应结果以字符串方式返回。如果没有响应内容则返回空字符串
* @param url 请求的url地址
* @param params 请求参数
* @param charset url编码采用的码表
* @return
*/
public
static
String getDataByPost(String url,Map
{
if
(url ==
null
)
{
return
;
}
url = url.trim();
URL targetUrl =
null
;
OutputStream out =
null
;
try
{
targetUrl =
new
URL(url);
HttpURLConnection conn = (HttpURLConnection) targetUrl.openConnection();
conn.setConnectTimeout(
3000
);
conn.setRequestMethod(POST);
conn.setDoInput(
true
);
conn.setDoOutput(
true
);
StringBuilder sb =
new
StringBuilder();
if
(params!=
null
&& !params.isEmpty())
{
for
(Map.Entry
{
// 对请求数据中的中文进行编码
sb.append(me.getKey()).append(=).append(URLEncoder.encode(me.getValue(),charset)).append(&);
}
sb.deleteCharAt(sb.length()-
1
);
}
byte
[] data = sb.toString().getBytes();
conn.setRequestProperty(Content-Type,application/x-www-form-urlencoded);
conn.setRequestProperty(Content-Length, String.valueOf(data.length));
out = conn.getOutputStream();
out.write(data);
Log.i(TAG,post:url----->+targetUrl.toString());
//打印log
int
responseCode = conn.getResponseCode();
if
(responseCode == HttpURLConnection.HTTP_OK)
{
return
stream2String(conn.getInputStream(),charset);
}
}
catch
(Exception e)
{
Log.i(TAG,e.getMessage());
}
return
;
}
/**
* 将输入流对象中的数据输出到字符串中返回
* @param in
* @return
* @throws IOException
*/
private
static
String stream2String(InputStream in,String charset)
throws
IOException
{
if
(in ==
null
)
return
;
byte
[] buffer =
new
byte
[
1024
];
ByteArrayOutputStream bout =
new
ByteArrayOutputStream();
int
len =
0
;
while
((len = in.read(buffer)) !=-
1
)
{
bout.write(buffer,
0
, len);
}
String result =
new
String(bout.toByteArray(),charset);
in.close();
return
result;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
package
cn.edu.chd.httpclientdemo.http;
import
java.io.ByteArrayOutputStream;
import
java.io.IOException;
import
java.io.InputStream;
import
java.net.URLEncoder;
import
java.util.ArrayList;
import
java.util.List;
import
java.util.Map;
import
org.apache.http.HttpEntity;
import
org.apache.http.HttpResponse;
import
org.apache.http.NameValuePair;
import
org.apache.http.StatusLine;
import
org.apache.http.client.HttpClient;
import
org.apache.http.client.entity.UrlEncodedFormEntity;
import
org.apache.http.client.methods.HttpGet;
import
org.apache.http.client.methods.HttpPost;
import
org.apache.http.impl.client.DefaultHttpClient;
import
org.apache.http.message.BasicNameValuePair;
import
android.util.Log;
/**
* @author Rowand jj
*
*http工具类,发送get/post请求
*/
public
final
class
HttpUtils
{
private
static
final
String TAG = HttpUtils;
private
static
final
String CHARSET = utf-
8
;
private
HttpUtils(){}
/**
* 以get方式向指定url发送请求,将响应结果以字符串方式返回
* @param uri
* @return 如果没有响应数据返回null
*/
public
static
String requestByGet(String url,Map
{
if
(url ==
null
)
return
null
;
// 构建默认http客户端对象
HttpClient client =
new
DefaultHttpClient();
try
{
// 拼装url,并对中文进行编码
StringBuilder sb =
new
StringBuilder(url+?);
if
(data !=
null
)
{
for
(Map.Entry
{
sb.append(URLEncoder.encode(me.getKey(),CHARSET)).append(=).append(URLEncoder.encode(me.getValue(),utf-
8
)).append(&);
}
sb.deleteCharAt(sb.length()-
1
);
}
Log.i(TAG, [get]--->uri:+sb.toString());
// 创建一个get请求
HttpGet get =
new
HttpGet(sb.toString());
// 执行get请求,获取http响应
HttpResponse response = client.execute(get);
// 获取响应状态行
StatusLine statusLine = response.getStatusLine();
//请求成功
if
(statusLine !=
null
&& statusLine.getStatusCode() ==
200
)
{
// 获取响应实体
HttpEntity entity = response.getEntity();
if
(entity !=
null
)
{
return
readInputStream(entity.getContent());
}
}
}
catch
(Exception e)
{
e.printStackTrace();
}
return
null
;
}
/**
* 以post方式向指定url发送请求,将响应结果以字符串方式返回
* @param url
* @param data 以键值对形式表示的信息
* @return
*/
public
static
String requestByPost(String url,Map
{
if
(url ==
null
)
return
null
;
HttpClient client =
new
DefaultHttpClient();
HttpPost post =
new
HttpPost(url);
List
null
;
try
{
Log.i(TAG, [post]--->uri:+url);
params =
new
ArrayList
if
(data !=
null
)
{
for
(Map.Entry
{
params.add(
new
BasicNameValuePair(me.getKey(),me.getValue()));
}
}
// 设置请求实体
post.setEntity(
new
UrlEncodedFormEntity(params,CHARSET));
// 获取响应信息
HttpResponse response = client.execute(post);
StatusLine statusLine = response.getStatusLine();
if
(statusLine!=
null
&& statusLine.getStatusCode()==
200
)
{
HttpEntity entity = response.getEntity();
if
(entity!=
null
)
{
return
readInputStream(entity.getContent());
}
}
}
catch
(Exception e)
{
e.printStackTrace();
}
return
null
;
}
/**
* 将流中的数据写入字符串返回
* @param is
* @return
* @throws IOException
*/
private
static
String readInputStream(InputStream is)
throws
IOException
{
if
(is ==
null
)
return
null
;
ByteArrayOutputStream bout =
new
ByteArrayOutputStream();
int
len =
0
;
byte
[] buf =
new
byte
[
1024
];
while
((len = is.read(buf))!=-
1
)
{
bout.write(buf,
0
, len);
}
is.close();
return
new
String(bout.toByteArray());
}
/**
* 将流中的数据写入字符串返回,以指定的编码格式
* 【如果服务端返回的编码不是utf-8,可以使用此方法,将返回结果以指定编码格式写入字符串】
* @param is
* @return
* @throws IOException
*/
private
static
String readInputStream(InputStream is,String charset)
throws
IOException
{
if
(is ==
null
)
return
null
;
ByteArrayOutputStream bout =
new
ByteArrayOutputStream();
int
len =
0
;
byte
[] buf =
new
byte
[
1024
];
while
((len = is.read(buf))!=-
1
)
{
bout.write(buf,
0
, len);
}
is.close();
return
new
String(bout.toByteArray(),charset);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
/**
* 使用异步http框架发送get请求
* @param path get路径,中文参数需要编码(URLEncoder.encode)
*/
public
void
doGet(String path)
{
AsyncHttpClient httpClient =
new
AsyncHttpClient();
httpClient.get(path,
new
AsyncHttpResponseHandler(){
@Override
public
void
onSuccess(
int
statusCode, Header[] headers,
byte
[] responseBody)
{
if
(statusCode ==
200
)
{
try
{
// 此处应该根据服务端的编码格式进行编码,否则会乱码
tv_show.setText(
new
String(responseBody,utf-
8
));
}
catch
(UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
}
});
}
/**
* 使用异步http框架发送get请求
* @param path
*/
public
void
doPost(String path)
{
AsyncHttpClient httpClient =
new
AsyncHttpClient();
RequestParams params =
new
RequestParams();
params.put(paper,中文);
//value可以是流、文件、对象等其他类型,很强大!!
httpClient.post(path, params,
new
AsyncHttpResponseHandler(){
@Override
public
void
onSuccess(
int
statusCode, Header[] headers,
byte
[] responseBody)
{
if
(statusCode ==
200
)
{
tv_show.setText(
|