【问题标题】:How to send Https Post request in java如何在 java 中发送 Https Post 请求
【发布时间】:2011-08-03 13:44:26
【问题描述】:

我想从 java 代码登录到应用程序。 这是我的代码...

String httpsURL = "https://www.abcd.com/auth/login/";

String query = "email="+URLEncoder.encode("abc@xyz.com","UTF-8"); 
query += "&";
query += "password="+URLEncoder.encode("abcd","UTF-8") ;

URL myurl = new URL(httpsURL);
HttpsURLConnection con = (HttpsURLConnection)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() ) 
System.out.print( (char)c ); 
input.close(); 

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

但我无法登录,它只返回登录页面。

如果有人可以,请帮助我理解我做错了什么。

【问题讨论】:

  • 我想您的登录页面上有一个表单。如果您将数据发送到带有表单的页面,则不会发生任何事情。您必须将数据发送到您将表单数据发布到的页面。
  • 警告:内容长度应包含以字节为单位的大小。根据“查询”的内容,query.length() 和 query.getBytes().length 可能相同也可能不同。应该使用后者。

标签: java http-post httpurlconnection


【解决方案1】:

错误:-(www-form中间有多余的空格)

con.setRequestProperty("Content-Type","application/x-www- form-urlencoded"); 

正确

 con.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); 

【讨论】:

  • 两者看起来一样有什么区别?
  • @sunleo 我需要发送 JSON 数据作为 HTTPS 请求的 POST 数据。我尝试将 JSON 转换为字符串并将其写入 outputStream,但请求会引发 400 状态错误。有谁知道错误是什么?
  • 也许您不应该发送 application/x-www-form-urlencoded,而是 application/json,作为内容类型。
【解决方案2】:

您得到 400 可能有几个原因,但通常是因为数据格式不正确(可能需要 XML?)。也许记录已经存在。用邮递员试试看你会得到什么结果。

【讨论】:

    猜你喜欢
    • 2018-11-14
    • 1970-01-01
    • 2011-10-18
    • 2011-03-20
    • 2018-09-10
    • 2011-05-12
    相关资源
    最近更新 更多