5
5
import java .net .URLEncoder ;
6
6
import java .util .Collections ;
7
7
import java .util .HashMap ;
8
- import java .util .List ;
9
8
import java .util .Map ;
10
9
import java .util .Map .Entry ;
11
- import java .util .stream .Collectors ;
12
10
13
- import org .nlpcn .commons .lang .util .IOUtil ;
11
+ import org .nlpcn .jcoder .util .ApiException ;
12
+ import org .nutz .http .Header ;
14
13
import org .nutz .http .Http ;
14
+ import org .nutz .http .Request ;
15
+ import org .nutz .http .Request .METHOD ;
15
16
import org .nutz .http .Response ;
17
+ import org .nutz .http .Sender ;
16
18
17
- import com .alibaba .fastjson .JSONArray ;
18
19
import com .alibaba .fastjson .JSONObject ;
19
20
20
21
/**
23
24
* @author Ansj
24
25
*
25
26
*/
27
+ @ Deprecated
26
28
public class HttpApiClient {
29
+
30
+ private static final String TOKEN_HEAD = "authorization" ;
31
+
27
32
private String ip ;
28
33
private int port ;
34
+ private String name ;
35
+ private String password ;
36
+
37
+ private Header header ;
29
38
30
39
public HttpApiClient (String ip , int port ) {
31
40
this .ip = ip ;
32
41
this .port = port ;
33
42
}
34
43
44
+ /**
45
+ * 具有登录的restful api 接口
46
+ *
47
+ * @param ip
48
+ * @param port
49
+ * @param name
50
+ * @param password
51
+ * @param autoCheck 是否自动检查token过期.检查频率为10分钟一次.保证token一直续约
52
+ * @throws Exception
53
+ */
54
+ public HttpApiClient (String ip , int port , String name , String password , boolean validation ) throws Exception {
55
+ this .ip = ip ;
56
+ this .port = port ;
57
+ this .name = name ;
58
+ this .password = password ;
59
+ login ();
60
+ }
61
+
62
+ /**
63
+ * 进行登录验证
64
+ *
65
+ * @throws Exception
66
+ */
67
+ public synchronized void login () throws Exception {
68
+
69
+ if (this .header != null && validation ()) { //如果已经持有token ,则不再登录
70
+ return ;
71
+ }
72
+
73
+ Map <String , Object > params = new HashMap <>();
74
+
75
+ params .put ("name" , name );
76
+ params .put ("password" , password );
77
+ Response response = Http .post2 ("http://" + ip + ":" + port + "/login/api" , params , 60000 );
78
+
79
+ JSONObject job = JSONObject .parseObject (response .getContent ());
80
+
81
+ if (response .getStatus () == 200 ) {
82
+ String token = job .getString ("obj" );
83
+ Map <String , String > headMap = new HashMap <>();
84
+ headMap .put (TOKEN_HEAD , token );
85
+ header = Header .create (headMap );
86
+ } else {
87
+ throw new ApiException (ApiException .Forbidden , job .toJSONString ());
88
+ }
89
+ }
90
+
91
+ private boolean validation () {
92
+ Response response = Http .get ("http://" + ip + ":" + port + "/validation/token" );
93
+ if (response .getStatus () != 200 ) {
94
+ return true ;
95
+ } else {
96
+ return false ;
97
+ }
98
+
99
+ }
35
100
36
101
/**
37
102
* 通过get方式获取流
@@ -57,33 +122,40 @@ public Response get(String className, String methodName, int timeout) throws Mal
57
122
* @throws IOException
58
123
*/
59
124
public Response get (String className , String methodName , int timeout , Map <String , Object > params ) throws MalformedURLException , IOException {
60
- StringBuilder url = new StringBuilder ("http://" + ip + ":" + port + "/api/" + className + "/" + methodName + "?1=1" );
125
+ StringBuilder paramSb = new StringBuilder ();
61
126
62
127
if (params != null && params .size () > 0 ) {
63
128
for (Entry <String , Object > entry : params .entrySet ()) {
64
- url .append ("&" );
65
- url .append (entry .getKey ());
66
- url .append ("=" );
67
- url .append (URLEncoder .encode (String .valueOf (entry .getValue ()), "utf-8" ));
129
+ if (paramSb .length () > 0 ) {
130
+ paramSb .append ("&" );
131
+ }
132
+ paramSb .append (entry .getKey ());
133
+ paramSb .append ("=" );
134
+ paramSb .append (URLEncoder .encode (String .valueOf (entry .getValue ()), "utf-8" ));
68
135
}
69
136
}
70
137
71
- return Http . get (url .toString (), timeout );
138
+ return get (className , methodName , paramSb .toString (), timeout );
72
139
}
73
140
74
141
/**
75
142
* 通过get方式获取流
76
143
*
77
144
* @param className
78
145
* @param methodName
79
- * @param params 直接拼装的sql ,不需要带开始的?号
146
+ * @param params 直接拼装的http参数 ,不需要带开始的?号
80
147
* @return
81
148
* @throws MalformedURLException
82
149
* @throws IOException
83
150
*/
84
- public Response get (String className , String methodName , int timeout , String params ) throws MalformedURLException , IOException {
85
- StringBuilder url = new StringBuilder ("http://" + ip + ":" + port + "/api/" + className + "/" + methodName + "?" + params );
86
- return Http .get (url .toString (), timeout );
151
+ public Response get (String className , String methodName , String params , int timeout ) throws MalformedURLException , IOException {
152
+ StringBuilder makeUrl = makeUrl (className , methodName );
153
+ makeUrl .append ("?" ).append (params );
154
+ Request req = Request .get (makeUrl .toString ());
155
+ if (header != null ) {
156
+ req = req .setHeader (header );
157
+ }
158
+ return Sender .create (req ).setTimeout (timeout ).send ();
87
159
}
88
160
89
161
/**
@@ -97,7 +169,45 @@ public Response get(String className, String methodName, int timeout, String par
97
169
* @throws IOException
98
170
*/
99
171
public Response post (String className , String methodName , int timeout , Map <String , Object > params ) throws MalformedURLException , IOException {
100
- return Http .post2 ("http://" + ip + ":" + port + "/api/" + className + "/" + methodName .toString (), params , timeout );
172
+ return Sender .create (Request .create (makeUrl (className , methodName ).toString (), METHOD .POST , params , header )).setTimeout (timeout ).send ();
173
+ }
174
+
175
+ /**
176
+ * POST 一个字符串
177
+ *
178
+ * @param className
179
+ * @param methodName
180
+ * @param content
181
+ * @param timeout
182
+ * @return
183
+ */
184
+ public Response post (String className , String methodName , Object body , int timeout ) {
185
+ return Http .post3 (makeUrl (className , methodName ).toString (), body , header , timeout );
186
+ }
187
+
188
+ /**
189
+ * 上传一个文件
190
+ *
191
+ * @param className
192
+ * @param methodName
193
+ * @param params
194
+ * @param timeout
195
+ * @return
196
+ */
197
+ public Response upload (String className , String methodName , Map <String , Object > params , int timeout ) {
198
+ return Http .upload (makeUrl (className , methodName ).toString (), params , header , timeout );
199
+ }
200
+
201
+ private StringBuilder makeUrl (String className , String methodName ) {
202
+ StringBuilder sb = new StringBuilder ();
203
+ sb .append ("http://" );
204
+ sb .append (ip );
205
+ sb .append (":" );
206
+ sb .append (port );
207
+ sb .append ("/api/" );
208
+ sb .append (className );
209
+ sb .append (methodName );
210
+ return sb ;
101
211
}
102
212
103
213
}
0 commit comments