Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在获取JSON响应的同时获取411响应代码_Java_Json_Blackberry_Http Headers - Fatal编程技术网

Java 在获取JSON响应的同时获取411响应代码

Java 在获取JSON响应的同时获取411响应代码,java,json,blackberry,http-headers,Java,Json,Blackberry,Http Headers,在我的应用程序中,我尝试使用POST请求获取响应。响应服务器正在以Json格式发送给我。但是在添加属性之后,它将响应代码返回为411(即内容长度问题)。 我已经添加了内容长度。那么我没有得到的问题在哪里呢。这是我的密码: String url = "https://xxx:8243/people/v3"; STRURL = url + HttpComm.getConnectionString().trim(); StringBuffer postData = new StringBuffer(

在我的应用程序中,我尝试使用POST请求获取响应。响应服务器正在以Json格式发送给我。但是在添加属性之后,它将响应代码返回为411(即内容长度问题)。 我已经添加了内容长度。那么我没有得到的问题在哪里呢。这是我的密码:

String url = "https://xxx:8243/people/v3";
STRURL = url + HttpComm.getConnectionString().trim();

StringBuffer postData = new StringBuffer();
HttpConnection httpConnection = null;
try {
    httpConnection = (HttpConnection) Connector.open(STRURL);
} catch (IOException e1) {
    e1.printStackTrace();
};

try {
    httpConnection.setRequestMethod("POST");
    postData.append("?username="+user);
    postData.append("&password="+password);
    String encodedData = postData.toString();
    byte[] postDataByte = postData.toString().getBytes("UTF-8");
    httpConnection.setRequestProperty("Authorization", "bearer"+"ZWOu3HL4vwaOLrFAuEFqsxNQf6ka");
    httpConnection.setRequestProperty("Content-Type","application/json");
    httpConnection.setRequestProperty("Content-Length", String.valueOf(postDataByte.length));
    OutputStream out = httpConnection.openOutputStream();
    DataOutputStream dos = new DataOutputStream(out);
    out.write(postData.toString().getBytes());
    out.flush();
    int statusCode = httpConnection.getResponseCode();
    Logger.out("HttpComm", "status code:::::::   "+statusCode);
    if (statusCode != HttpConnection.HTTP_OK)
    {

    }
更新代码:

HttpConnection httpConnection = null;
    try {
        httpConnection = (HttpConnection) Connector.open(STRURL);
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    };
            try {
                httpConnection.setRequestMethod("POST");
                URLEncodedPostData postData = new URLEncodedPostData("UTF-8", false);
                 postData.append("username", user);
                 postData.append("password", password);
                 byte[] postDataByte = postData.getBytes();
                  httpConnection.setRequestProperty("Authorization", "bearer"+"ZWOu3HL4vwaOLrFAuEFqsxNQf6ka");
                   httpConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                   httpConnection.setRequestProperty("Content-Length", String.valueOf(postDataByte.length));
                   OutputStream out = httpConnection.openOutputStream(); 
                   out.write(postDataByte);
                   out.flush();

                   int statusCode = httpConnection.getResponseCode();
                   Logger.out("HttpComm", "status code:::::::   "+statusCode);

这里有些东西看起来不太对劲。我建议尝试以下方法:

 httpConnection.setRequestMethod("POST");

 URLEncodedPostData postData = new URLEncodedPostData("UTF-8", false);
 postData.append("username", user);
 postData.append("password", password);
 byte[] postDataByte = postData.getBytes();

 httpConnection.setRequestProperty("Authorization", "bearer"+"ZWOu3HL4vwaOLrFAuEFqsxNQf6ka");
 httpConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
 httpConnection.setRequestProperty("Content-Length", String.valueOf(postDataByte.length));

 OutputStream out = httpConnection.openOutputStream(); 
 DataOutputStream dos = new DataOutputStream(out);
 out.write(postDataByte);
 out.flush();

 int statusCode = httpConnection.getResponseCode();
 Logger.out("HttpComm", "status code:::::::   "+statusCode);
 if (statusCode != HttpConnection.HTTP_OK)
我改变的是:

  • 正如@samlewis所说,代码正在创建一个变量来保存post数据字节,但在调用
    out.write()
    时没有使用它

  • 代码将内容类型设置为JSON,但它没有发送JSON。请求只是两个参数。响应可以是JSON,但在请求的
    Content-Type
    参数中没有指定

  • 用户名/密码参数仅使用字符串进行编码。通常,最好使用该类

  • 如果要使用字符串,我认为在username参数的前面添加
    仍然是不正确的。如果要在
    GET
    URL中编码参数,则使用
    https://xxx:8243/people/v3?username=user&password=password
    。但是,这段代码使用的是POST,而不是GET

  • 还有一个未使用的
    encodedData
    变量


  • 当然是out.write(postData.toString().getBytes())不正确,应该是out.write(postDataByte)我已经按照你说的更改了代码。但我还是得到了同样的回答:411。但是当我在浏览器中输入这个url时,我得到了正确的JSON响应@Arindam,你有这个服务器的测试用户名和密码可以在这里共享吗?没有这一点,我无法为你测试,我也不知道我还能做些什么来帮助你。你应该做出我在回复中发布的更改,但总有可能其他事情也出了问题。谢谢。不用给你测试用户和密码,我可以给你在桌面浏览器中点击URL后得到的JSON响应。可以吗?@Arindam,如果你有JSON回复,是的,编辑你的问题并将其放在那里会很好。但是,我认为这无助于调试
    411
    错误代码。@Arindam,什么是
    抛出的'allowIllegalResourceCall为false'?这不是JSON。我也有点困惑。如果服务器返回的是大JSON响应,它是否不工作?你期待什么不同的东西吗?你是说你得到了一个
    411
    错误代码,但你也得到了这个JSON?