Java http post:通过curl和java读取字节的差异

时间:2016-07-13 20:07:10

标签: java android http

我遇到了一个奇怪的问题,我将一些图像数据发布到服务器,现在我使用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);

知道可能导致此问题的原因是什么? 感谢

2 个答案:

答案 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发送原始字节。