annotate src/luan/modules/url/MultipartClient.java @ 1165:668f29bc52ea

clean up content-type
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 07 Feb 2018 23:16:12 -0700
parents 1a68fc55a80c
children 383f924dfe9d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
725
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 package luan.modules.url;
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 import java.io.OutputStream;
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4 import java.io.IOException;
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
5 import java.net.HttpURLConnection;
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
6 import java.util.List;
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
7 import java.util.ArrayList;
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 import java.util.Map;
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9 import java.util.HashMap;
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10 import luan.LuanTable;
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11 import luan.LuanException;
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 public final class MultipartClient {
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15 private static final byte[] __CRLF = {'\r','\n'};
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 private static final byte[] __DASHDASH = {'-','-'};
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 private static final String __ISO_8859_1 = "ISO-8859-1";
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19 private final Map params = new HashMap();
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 MultipartClient(Map params) throws LuanException {
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22 for( Object hack : params.entrySet() ) {
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23 Map.Entry entry = (Map.Entry)hack;
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24 String key = (String)entry.getKey();
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 Object val = entry.getValue();
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26 List list = new ArrayList();
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27 if( val instanceof String ) {
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 list.add(val);
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29 } else {
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 if( !(val instanceof LuanTable) )
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31 throw new LuanException( "parameter '"+key+"' must be string or table" );
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32 LuanTable t = (LuanTable)val;
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 if( !t.isList() )
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34 throw new LuanException( "parameter '"+key+"' table must be list" );
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 for( Object obj : t.asList() ) {
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36 if( !(obj instanceof String) )
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 throw new LuanException( "parameter '"+key+"' values must be strings" );
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 list.add(obj);
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39 }
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 }
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 this.params.put(key,list);
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42 }
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43 }
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45 public OutputStream write(HttpURLConnection httpCon) throws IOException {
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46 String boundary = "luan" + System.identityHashCode(this) + Long.toString(System.currentTimeMillis(),36);
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
47 byte[] boundaryBytes = boundary.getBytes(__ISO_8859_1);
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
48
1165
668f29bc52ea clean up content-type
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
49 httpCon.setRequestProperty("content-type","multipart/form-data; boundary="+boundary);
725
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
50 OutputStream out = httpCon.getOutputStream();
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
51 for( Object hack : params.entrySet() ) {
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
52 Map.Entry entry = (Map.Entry)hack;
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
53 String name = (String)entry.getKey();
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
54 List list = (List)entry.getValue();
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
55 for( Object obj : list ) {
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
56 String val = (String)obj;
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
57 out.write(__DASHDASH);
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
58 out.write(boundaryBytes);
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
59 out.write(__CRLF);
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
60 out.write(("Content-Disposition: form-data; name=\""+name+"\"").getBytes(__ISO_8859_1));
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
61 out.write(__CRLF);
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
62 out.write(__CRLF);
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
63 out.write(val.getBytes());
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
64 out.write(__CRLF);
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
65 }
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
66 }
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
67 out.write(__DASHDASH);
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
68 out.write(boundaryBytes);
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
69 out.write(__DASHDASH);
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
70 out.write(__CRLF);
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
71 return out;
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
72 }
a741a3a33423 add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
73 }