2013-06-18 172 views
2

在我的应用程序中,我尝试使用POST请求获取响应。响应服务器以Json格式发送给我。但是在添加属性后,它将响应代码返回为411(即内容长度问题)。 我已经添加了内容长度。那么,我没有得到什么问题。这里是我的代码:在获得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); 
+1

当然out.write(postData.toString()的getBytes())是不正确的,应该是out.write(postDataByte) – samlewis

回答

1

有一些看起来似乎不是十分正确这里的几件事情。我会建议您尝试这样的:

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) 

我改变了:

  1. 正如@samlewis说,代码是创建一个变量来担任此职的数据字节,但随后没有使用它时,它称为out.write()

  2. 该代码将内容类型设置为JSON,但它不是发送 JSON。该请求只是两个参数。响应可能是JSON,但您并未在请求的Content-Type参数中指定该响应。

  3. 用户名/密码参数只是使用字符串进行编码。通常,最好使用URLEncodedPostDatato hold your POST parameters

  4. 如果您打算使用字符串,我认为将?添加到username参数的前面仍然不正确。如果您想在GET URL中对参数进行编码,则使用https://xxx:8243/people/v3?username=user&password=password。但是,这段代码使用的是POST,而不是GET。

  5. 还有一个未使用的encodedData变量。

+0

我修改了代码,如你所说。但我仍然得到相同的回应:411.但是,当我在浏览器中输入此网址时,我得到了正确的JSON响应。 https://api.yookos.com:8243/people/v3?username=[yookos-username]&password=[yookos-password] –

+0

@Arindam,你有这个服务器的** test **用户名和密码你可以在这里分享?没有这个,我无法为你测试这个,我不知道我还能做些什么来帮助。你应该在我的答案中发布我所发布的更改,但也总是有可能出现其他问题。谢谢。 – Nate

+0

而不是给你测试用户和密码,我可以给你在桌面浏览器中点击URL后获得的JSON响应。会好吗? –