使用码头,我将字节发送到URL http://localhost:8080/input/
像这样-
public static void sampleBytesRequest (String url)
{
try
{
HttpClient client = new HttpClient();
client.start();
client.newRequest(url)
.content(new InputStreamContentProvider(new ByteArrayInputStream("batman".getBytes())))
.send();
}
catch (Exception e) { e.printStackTrace(); }
}
我的服务器(也包括Jetty)具有这样的处理程序-
public final class JettyHandler extends AbstractHandler implements JettyConstants, LqsConstants
{
@Override
public void handle (String target,
Request baseRequest,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType(UTF_ENCODING);
String requestBody = null;
try { requestBody = baseRequest.getReader().readLine(); }
catch (IOException e) { e.printStackTrace(); }
System.out.println(new String(IOUtils.toByteArray(request.getInputStream())));
}
}
如您所见,我正在尝试从二进制数据重新创建原始字符串并将其打印到stdout。
但是,如果我在处理程序的print语句中设置了一个断点,则当请求到达该行时,服务器似乎突然跳过了它。
我究竟做错了什么?如何获取要发送的二进制数据并重新创建字符串?
谢谢!
最佳答案
原来问题出在我的客户身上。
代替
client.newRequest(url)
.content(new InputStreamContentProvider(new ByteArrayInputStream("batman".getBytes())))
.send();
正确的方法是-
client.newRequest(url)
.content(new BytesContentProvider("batman".getBytes()), "text/plain")
.send();