JavaHTTPPOST:通过curl和Java读取字节的差异
我陷入了一个奇怪的问题,我正在向服务器发布一些图像数据,现在我使用curl创建了请求的图像,然后跟踪它 接下来是用java创建类似的请求 代码将原始二进制图像数据发布到服务器,但当我将java中的二进制数据与curl发布的二进制数据进行比较时,有一个微小的差异,因此我从服务器获得了400个响应代码 我认为区别在于几个点 下面是curl(linux)生成的请求。 现在是Java在读取字节时生成的请求。 Java代码如下所示:JavaHTTPPOST:通过curl和Java读取字节的差异,java,android,http,Java,Android,Http,我陷入了一个奇怪的问题,我正在向服务器发布一些图像数据,现在我使用curl创建了请求的图像,然后跟踪它 接下来是用java创建类似的请求 代码将原始二进制图像数据发布到服务器,但当我将java中的二进制数据与curl发布的二进制数据进行比较时,有一个微小的差异,因此我从服务器获得了400个响应代码 我认为区别在于几个点 下面是curl(linux)生成的请求。 现在是Java在读取字节时生成的请求。 Java代码如下所示: PrintWriter out = new PrintWri
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代码。您是正确的,使用字节数组编写器,这个问题已经解决了,但在那之后,几乎没有其他问题。我在下面写了一个最终奏效的答案。