Java:BufferedReader 和 WebAPI 响应
Java: BufferedReader and WebAPI response
我有一个 bufferedReader 正在接受 WebAPI 对 httpPost 请求的响应。
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
/* send http-POST request to webAPI */
OutputStream os = conn.getOutputStream();
os.write(input.getBytes());
os.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
作为对 webapi 发出的 httpPost 请求的结果,'br' 中包含的数据:-
{
"xx" : "...."
"yy" : "...."
"zz" : "...."
}
HTTP/1.1 202... blah blah blah
Content-Length: 35
X-Frame-Options: deny
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Connection: close
首先,我想指出的是,我在响应本身中获得 header 信息很奇怪……但仅针对 JAVA..(我编写了相同的代码C# 的事情,这是我最精通的地方,没有收到任何 header 信息返回)。这可能吗?因为...据我所知,webapi 的响应独立于 C# 或 Java 代码?
现在我的主要 objective 是提取键 'zz' 的值。
我正在尝试类似的东西:-
JSONParser parser = new JSONParser();
try
{
JSONObject json = (JSONObject) parser.parse(br);
}
catch (org.json.simple.parser.ParseException e)
{
e.printStackTrace();
}
但是由于消息的奇怪 HTTP/202 响应部分,我收到错误 "Unexpected character (H) at position 281"。
所以,我在想,也许我需要在尝试使用 JSON 之前截断缓冲区 'br'。我想知道这样做的最佳方法是什么?
通过 json
进行操作会使它变得更加复杂,因为您必须先将其转换为正确的 json
才能允许 json
解析器进行解析。
更好的方法是通过正则表达式
输入
{
xx :
yy :
zz : sample 123123
}
HTTP/1.1 202... blah blah blah
Content-Length: 35
X-Frame-Options: deny
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Connection: close
正则表达式
.*zz\s*:\s*(.*)[\n\r]/g
输出
sample 123123
有关详细信息,请参阅 this link
我有一个 bufferedReader 正在接受 WebAPI 对 httpPost 请求的响应。
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
/* send http-POST request to webAPI */
OutputStream os = conn.getOutputStream();
os.write(input.getBytes());
os.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
作为对 webapi 发出的 httpPost 请求的结果,'br' 中包含的数据:-
{
"xx" : "...."
"yy" : "...."
"zz" : "...."
}
HTTP/1.1 202... blah blah blah
Content-Length: 35
X-Frame-Options: deny
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Connection: close
首先,我想指出的是,我在响应本身中获得 header 信息很奇怪……但仅针对 JAVA..(我编写了相同的代码C# 的事情,这是我最精通的地方,没有收到任何 header 信息返回)。这可能吗?因为...据我所知,webapi 的响应独立于 C# 或 Java 代码?
现在我的主要 objective 是提取键 'zz' 的值。
我正在尝试类似的东西:-
JSONParser parser = new JSONParser();
try
{
JSONObject json = (JSONObject) parser.parse(br);
}
catch (org.json.simple.parser.ParseException e)
{
e.printStackTrace();
}
但是由于消息的奇怪 HTTP/202 响应部分,我收到错误 "Unexpected character (H) at position 281"。
所以,我在想,也许我需要在尝试使用 JSON 之前截断缓冲区 'br'。我想知道这样做的最佳方法是什么?
通过 json
进行操作会使它变得更加复杂,因为您必须先将其转换为正确的 json
才能允许 json
解析器进行解析。
更好的方法是通过正则表达式
输入
{
xx :
yy :
zz : sample 123123
}
HTTP/1.1 202... blah blah blah
Content-Length: 35
X-Frame-Options: deny
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Connection: close
正则表达式
.*zz\s*:\s*(.*)[\n\r]/g
输出
sample 123123
有关详细信息,请参阅 this link