在Java中使用POST中的特定数据

时间:2015-06-23 07:40:39

标签: java php json httpconnection

使用POST到www.httpbin.org/post(测试POST功能)输入“Hello World!”,我得到的响应是:

{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "Hello World!": ""
  }, 
  "headers": {
    "Accept": "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2", 
    "Content-Length": "12", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "Mozilla/4.0 (compatible; MSIE 5.0;Windows98;DigExt)"
  }, 
  "json": null, 
  "origin": "98.164.222.196", 
  "url": "http://httpbin.org/post"
}

Resp Code:200
Resp Message:OK

基于此,我知道POST正在运行..现在我想从form变量中获取输入并得到一个Hello World!的字符串。

我正在尝试使用JSON来解析它,但遇到了问题......从Hello World!变量中获取form的方法是什么?

POST代码:

String httpURL = "http://httpbin.org/post";

String query = textInput;

URL myurl = new URL(httpURL);
HttpURLConnection con = (HttpURLConnection)myurl.openConnection();
con.setRequestMethod("POST");

con.setRequestProperty("Content-length", String.valueOf(query.length())); 
con.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); 
con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0;Windows98;DigExt)"); 
con.setDoOutput(true); 
con.setDoInput(true); 

DataOutputStream output = new DataOutputStream(con.getOutputStream());  


output.writeBytes(query);

output.close();

DataInputStream input = new DataInputStream( con.getInputStream() ); 


for( int c = input.read(); c != -1; c = input.read() ) 
{
    response += (char)c;
}

input.close(); 

System.out.println("" + response);

//JSONObject json = new JSONObject(response);
//String uname = json.getJSONObject("form").getString("data");

System.out.println("Resp Code:"+con .getResponseCode()); 
System.out.println("Resp Message:"+ con .getResponseMessage());

getString("data")是给我带来问题的......我注意到如果我通过POST方法发送文本“data”,程序似乎运行正常,否则会因为错误而崩溃那个JSON对象不存在。

1 个答案:

答案 0 :(得分:1)

问题是您在请求中提供的错误标题“Content-Type”:“application / x-www-form-urlencoded”。您声明发送表单数据,但是您在正文中发送纯文本。服务器正在尝试解析您的请求,并为您提供已解析的信息。

如果你提供了正确的Mime-Type “Content-Type”:“text / plain”,你会得到类似的内容:

{
    "args": {}
    "data": "Hello world!"
    "files": {}
    "form": {}
    "headers": { ....

然后你可以通过你想要使用的代码获得你想要的东西: getString(“data”)