Mercurial > hg > fulltextSearchServer
comparison lib/org.json_2.0/src/org/json/HTTP.java @ 0:db87c1b7eb6d
initial
author | dwinter |
---|---|
date | Wed, 03 Nov 2010 12:18:46 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:db87c1b7eb6d |
---|---|
1 package org.json; | |
2 | |
3 /* | |
4 Copyright (c) 2002 JSON.org | |
5 | |
6 Permission is hereby granted, free of charge, to any person obtaining a copy | |
7 of this software and associated documentation files (the "Software"), to deal | |
8 in the Software without restriction, including without limitation the rights | |
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
10 copies of the Software, and to permit persons to whom the Software is | |
11 furnished to do so, subject to the following conditions: | |
12 | |
13 The above copyright notice and this permission notice shall be included in all | |
14 copies or substantial portions of the Software. | |
15 | |
16 The Software shall be used for Good, not Evil. | |
17 | |
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
21 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
22 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
23 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
24 SOFTWARE. | |
25 */ | |
26 | |
27 import java.util.Iterator; | |
28 | |
29 /** | |
30 * Convert an HTTP header to a JSONObject and back. | |
31 * @author JSON.org | |
32 * @version 2008-09-18 | |
33 */ | |
34 public class HTTP { | |
35 | |
36 /** Carriage return/line feed. */ | |
37 public static final String CRLF = "\r\n"; | |
38 | |
39 /** | |
40 * Convert an HTTP header string into a JSONObject. It can be a request | |
41 * header or a response header. A request header will contain | |
42 * <pre>{ | |
43 * Method: "POST" (for example), | |
44 * "Request-URI": "/" (for example), | |
45 * "HTTP-Version": "HTTP/1.1" (for example) | |
46 * }</pre> | |
47 * A response header will contain | |
48 * <pre>{ | |
49 * "HTTP-Version": "HTTP/1.1" (for example), | |
50 * "Status-Code": "200" (for example), | |
51 * "Reason-Phrase": "OK" (for example) | |
52 * }</pre> | |
53 * In addition, the other parameters in the header will be captured, using | |
54 * the HTTP field names as JSON names, so that <pre> | |
55 * Date: Sun, 26 May 2002 18:06:04 GMT | |
56 * Cookie: Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s | |
57 * Cache-Control: no-cache</pre> | |
58 * become | |
59 * <pre>{... | |
60 * Date: "Sun, 26 May 2002 18:06:04 GMT", | |
61 * Cookie: "Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s", | |
62 * "Cache-Control": "no-cache", | |
63 * ...}</pre> | |
64 * It does no further checking or conversion. It does not parse dates. | |
65 * It does not do '%' transforms on URLs. | |
66 * @param string An HTTP header string. | |
67 * @return A JSONObject containing the elements and attributes | |
68 * of the XML string. | |
69 * @throws JSONException | |
70 */ | |
71 public static JSONObject toJSONObject(String string) throws JSONException { | |
72 JSONObject o = new JSONObject(); | |
73 HTTPTokener x = new HTTPTokener(string); | |
74 String t; | |
75 | |
76 t = x.nextToken(); | |
77 if (t.toUpperCase().startsWith("HTTP")) { | |
78 | |
79 // Response | |
80 | |
81 o.put("HTTP-Version", t); | |
82 o.put("Status-Code", x.nextToken()); | |
83 o.put("Reason-Phrase", x.nextTo('\0')); | |
84 x.next(); | |
85 | |
86 } else { | |
87 | |
88 // Request | |
89 | |
90 o.put("Method", t); | |
91 o.put("Request-URI", x.nextToken()); | |
92 o.put("HTTP-Version", x.nextToken()); | |
93 } | |
94 | |
95 // Fields | |
96 | |
97 while (x.more()) { | |
98 String name = x.nextTo(':'); | |
99 x.next(':'); | |
100 o.put(name, x.nextTo('\0')); | |
101 x.next(); | |
102 } | |
103 return o; | |
104 } | |
105 | |
106 | |
107 /** | |
108 * Convert a JSONObject into an HTTP header. A request header must contain | |
109 * <pre>{ | |
110 * Method: "POST" (for example), | |
111 * "Request-URI": "/" (for example), | |
112 * "HTTP-Version": "HTTP/1.1" (for example) | |
113 * }</pre> | |
114 * A response header must contain | |
115 * <pre>{ | |
116 * "HTTP-Version": "HTTP/1.1" (for example), | |
117 * "Status-Code": "200" (for example), | |
118 * "Reason-Phrase": "OK" (for example) | |
119 * }</pre> | |
120 * Any other members of the JSONObject will be output as HTTP fields. | |
121 * The result will end with two CRLF pairs. | |
122 * @param o A JSONObject | |
123 * @return An HTTP header string. | |
124 * @throws JSONException if the object does not contain enough | |
125 * information. | |
126 */ | |
127 public static String toString(JSONObject o) throws JSONException { | |
128 Iterator keys = o.keys(); | |
129 String s; | |
130 StringBuffer sb = new StringBuffer(); | |
131 if (o.has("Status-Code") && o.has("Reason-Phrase")) { | |
132 sb.append(o.getString("HTTP-Version")); | |
133 sb.append(' '); | |
134 sb.append(o.getString("Status-Code")); | |
135 sb.append(' '); | |
136 sb.append(o.getString("Reason-Phrase")); | |
137 } else if (o.has("Method") && o.has("Request-URI")) { | |
138 sb.append(o.getString("Method")); | |
139 sb.append(' '); | |
140 sb.append('"'); | |
141 sb.append(o.getString("Request-URI")); | |
142 sb.append('"'); | |
143 sb.append(' '); | |
144 sb.append(o.getString("HTTP-Version")); | |
145 } else { | |
146 throw new JSONException("Not enough material for an HTTP header."); | |
147 } | |
148 sb.append(CRLF); | |
149 while (keys.hasNext()) { | |
150 s = keys.next().toString(); | |
151 if (!s.equals("HTTP-Version") && !s.equals("Status-Code") && | |
152 !s.equals("Reason-Phrase") && !s.equals("Method") && | |
153 !s.equals("Request-URI") && !o.isNull(s)) { | |
154 sb.append(s); | |
155 sb.append(": "); | |
156 sb.append(o.getString(s)); | |
157 sb.append(CRLF); | |
158 } | |
159 } | |
160 sb.append(CRLF); | |
161 return sb.toString(); | |
162 } | |
163 } |