【问题标题】:HTTPClient StringEntity PUT troublesHTTPClient StringEntity PUT 问题
【发布时间】:2013-03-18 18:10:02
【问题描述】:

我正在努力通过 HTTP PUT 在服务器上创建纯文本文件。我正在使用 apache commons httpClient。我的凭据有效,但我的请求中没有正文内容。我必须怎么做才能创建这样的文件?当我尝试通过 hurl.it(即设置我的凭据和设置正文)时,它按预期工作。我想要的是在文件正文中显示的字符串“hej”。让它工作后,我打算使用 JSONString。以下代码在服务器上生成一个空文件(204 响应):

        HttpClient httpClient = new DefaultHttpClient();

        String encoding = http_username + ":" + http_password;
        encoding = Base64.encodeBase64String(encoding.getBytes());
        HttpPut httpput = new HttpPut(http_path);

        HttpEntity content=null;
        try{
         content = new StringEntity("hej");
        }
        catch(UnsupportedEncodingException e){
            logger.error("Failed to Encode result");
        }


        logger.info("executing request " + httpput.getRequestLine());
        try {
            httpput.setHeader("Authorization", "Basic " + encoding);
            //httpput.setHeader("Content-Type", "application/json; charset=utf-8");
            httpput.setEntity(content);
            HttpResponse response = httpClient.execute(httpput);
            Header[] allHeaders = response.getAllHeaders();
            for (Header h : allHeaders) {
                logger.info(h.getName() + ": " + h.getValue());
            }

        } catch (Exception e) {
            logger.error(e.getMessage());
        }

我尝试过设置内容类型和不设置,没有区别。我做错了什么基本的事情?

【问题讨论】:

  • 您当前的代码根本不发送文件,它在请求正文中发送一些纯文本。您期望的服务器端资源是什么(如果您包含资源方法,它将帮助我们帮助您)。
  • 我无法访问服务器端,因此无法提供太多信息。您可以在这里列出内容:upload.cmstest01.ku.dk data.json 文件是由上面的代码生成的,而 data2.json 是通过 hurl.it 尝试生成的
  • 在不知道有效请求应该是什么样子的情况下无法给您建议。但是您可以做的是,在打开 Google Chrome 开发工具的情况下运行 hurl.it 测试,并在“网络”选项卡中检查发送到服务器的所有 HTTP 属性。然后在您的客户端代码中复制这些设置。如果您需要帮助,请将您找到的房产信息发布到您的问题中。

标签: java json http apache-commons


【解决方案1】:

原来 Base64.encodeBase64String 在字符串的末尾附加了一个换行符,这会把所有东西都扔掉!

String encoding = http_username + ":" + http_password;
encoding = Base64.encodeBase64String(encoding.getBytes());
encoding= encoding.replace("\r\n", ""); //This fixes everything

哇,我花了几天时间才弄明白!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多