2011-08-03 58 views
34

我想从java代码登录到应用程序。 这里是我的代码...如何使用java发送Https Post请求

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

String query = "email="+URLEncoder.encode("[email protected]","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()); 

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

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

+0

我想你有你的登录页面上的表单。如果您将数据发送到带有窗体的页面,则不会发生任何事情。您必须将数据发送到您将表单数据发布到的页面。 – 11684

+0

警告:内容长度应包含以字节为单位的大小。根据“query”的内容,query.length()和query.getBytes()。的长度可能相同也可能不相同。后者应该被使用。 –

回答

28

错误: - (额外的空间是存在于WWW-形式中旬)

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

正确

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

两者似乎有什么不同? – sunleo

+0

确定它有空间吗? – sunleo

+1

@sunleo我需要发送JSON数据作为HTTPS请求的POST数据。我试图通过将JSON转换为字符串并将其写入outputStream,但该请求会引发400状态错误。有谁知道错误是什么? – Muthu