JavaHTTPPOST:通过curl和Java读取字节的差异

JavaHTTPPOST:通过curl和Java读取字节的差异,java,android,http,Java,Android,Http,我陷入了一个奇怪的问题,我正在向服务器发布一些图像数据,现在我使用curl创建了请求的图像,然后跟踪它 接下来是用java创建类似的请求 代码将原始二进制图像数据发布到服务器,但当我将java中的二进制数据与curl发布的二进制数据进行比较时,有一个微小的差异,因此我从服务器获得了400个响应代码 我认为区别在于几个点 下面是curl(linux)生成的请求。 现在是Java在读取字节时生成的请求。 Java代码如下所示: PrintWriter out = new PrintWri

我陷入了一个奇怪的问题,我正在向服务器发布一些图像数据,现在我使用curl创建了请求的图像,然后跟踪它

接下来是用java创建类似的请求

代码将原始二进制图像数据发布到服务器,但当我将java中的二进制数据与curl发布的二进制数据进行比较时,有一个微小的差异,因此我从服务器获得了400个响应代码

我认为区别在于几个点

下面是curl(linux)生成的请求。

现在是Java在读取字节时生成的请求。

Java代码如下所示:

    PrintWriter out = new PrintWriter(os);
    out.println("POST /1izb0rx1 HTTP/1.1");
    out.println("User-Agent: curl/7.35.0");
    out.println("Host: requestb.in");
    out.println("Accept: */*");
    out.println("Content-Disposition:inline; filename=test.png");
out.println("Authorization: Basic YW5kcm9pZDpUZXN0dGVzdDExISE=");
out.println("Content-Length: "+"24143");
out.println("Content-Type: application/x-www-form-urlencoded");
out.println();            
out.println("."+imgBytes);
知道是什么导致了这个问题吗?
谢谢不要使用PrintWriter发送原始字节。

所以

我让它工作了,问题是Android上的某些类被破坏了,它们的行为与核心Java上的行为不一样

在Java上工作的代码在这里不工作,原因是,在这里(Android上)发生了头的变化

这里也很好地提到了这个问题:

因此,我面临着一个类似的问题,添加外部更新的JAR和Android上的JAR是冲突的

最后,我使用了一个小型HTTP请求库:

代码如下:

    HttpRequest request = HttpRequest.post(url);
    request.authorization("Basic "+ah);
    request.part("file", fName+".png", "image/png", new File(file));
    request.part("title", "test");
    if(request.code()==201) {
      StringWriter sw = new StringWriter();
      request.receive(sw);
      onMedia(Media.parse(new  JsonParser().parse(sw.toString()).getAsJsonObject()));
   }

谢谢

这一切都很模糊。在这两种情况下,您发布多少字节?接收到多少字节?生成的请求是什么意思?
读取字节的差异
。谁在读字节?我不明白你在问什么,这个完整的数据块被发布到了服务器上。你真的认为我们会检查这些数据吗?我们不是计算机。如果您以两种方式发布图像字节,并且收到的字节在两种情况下都不相等,请这样说。还有什么问题?我说我已经试过ByteArrayOutputStream了,之后我就这样做了。发送的数据没有任何变化。我的首要任务是解决这个问题,然后我可以转向更标准的方法。你不是在评论不使用PrintWriter。你有没有试过不穿衣服?请显示完整的Android代码。您是正确的,使用字节数组编写器,这个问题已经解决了,但在那之后,几乎没有其他问题。我在下面写了一个最终奏效的答案。