Vis*_*swa 1 java grails applet http-post fingerprint
在Grails Web应用程序中,我试图使用rest API将小鸟(指纹)字节数组从applet发布到服务器.
这是我试过的
private String post(String purl,String customerId, byte[] regMin1,byte[] regMin2) throws Exception {
StringBuilder parameters = new StringBuilder();
parameters.append("customerId=");
parameters.append(customerId);
parameters.append("®Min1=");
parameters.append(URLEncoder.encode(new String(regMin1),"UTF-8"));
parameters.append("®Min2=");
parameters.append(URLEncoder.encode(new String(regMin2),"UTF-8"));
URL url = new URL(purl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length",Integer.toString(parameters.toString().getBytes().length));
DataOutputStream wr = new DataOutputStream(connection.getOutputStream ());
wr.writeBytes(parameters.toString());
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
StringBuilder builder = new StringBuilder();
String aux = "";
while ((aux = in.readLine()) != null) {
builder.append(aux);
}
in.close();
connection.disconnect();
return builder.toString();
}
Run Code Online (Sandbox Code Playgroud)
我可以成功发布regMin1,regMin2,但指纹验证总是失败.我怀疑,我是否正确发布.
这对我来说是一个非常糟糕的主意:
parameters.append(URLEncoder.encode(new String(regMin1),"UTF-8"));
...
parameters.append(URLEncoder.encode(new String(regMin2),"UTF-8"));
Run Code Online (Sandbox Code Playgroud)
如果regMin1并且实际上regMin2不是UTF-8文本(我猜他们不是),你几乎肯定会在这里丢失数据.
不要将任意二进制数据视为编码文本.
相反,转换regMin1和regMin2为Base64 -这样你会用ASCII字符,然后可以解码服务器上肯定得到原始的二进制数据结束.您可以使用URL安全版本的base64,以避免进一步编码结果.
如果您没有其他任何东西,可以使用一个很好的公共域base64库.例如:
parameters.append("®Min1=")
.append(Base64.encodeBytes(regMin1, Base64.URL_SAFE))
.append("®Min2=")
.append(Base64.encodeBytes(regMin2, Base64.URL_SAFE));
Run Code Online (Sandbox Code Playgroud)
请注意,您也希望使用该URL_SAFE选项进行解码- 不要只是尝试将其解码为"普通"base64数据.
(您可能仍希望将此转换为POST请求,如果您可以使用更好的HTTP库,那么您肯定会有更轻松的时间,但它们只是略有不同的问题.)
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |