使用码头,我将字节发送到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();

09-25 20:36