我遇到了一个奇怪的问题,我将一些图像数据发布到服务器,现在我使用curl创建了请求,然后追溯它。
接下来是在java中创建类似的请求。
代码将原始二进制图像数据发布到服务器,但是当我将java中的二进制数据与curl发布的二进制数据进行比较时,由于我从服务器获得400响应代码,因此存在微小差异。
我认为差异在于几点。
以下是curl(linux)生成的请求。 Generate by curl
现在这里是Java生成的请求,当我读取字节时。 Click here
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);
知道可能导致此问题的原因是什么? 感谢
答案 0 :(得分:1)
所以,
我得到了它的工作,问题是Android上的某些类被破坏了,并且表现不像他们在核心Java上的行为。
使用Java的相同代码在这里不起作用,原因是,此处发生了标题更改(在Android上)。
这个问题也在这里提到: https://github.com/WP-API/WP-API/issues/1862
因此,我遇到了类似的问题,添加外部更新的jar与Android上的相互冲突。
最后我使用了一个小的HTTP请求库:https://github.com/kevinsawicki/http-request
代码如下:
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()));
}
由于
答案 1 :(得分:-1)
不要使用PrintWriter发送原始字节。