2013-03-22 57 views
1

我正在使用以下代码发送REST请求,请求失败(401错误),因为它需要用户名和密码。如何将参数添加到宁静的请求?

如何将它们添加到网址?即使当我在浏览器中复制url并在其末尾添加用户名和密码时,浏览器弹出登录页面,所以我想在代码中我应该添加用户名和密码参数,但是如何?

URL url = new URL("www.example.com/user?ID=1234"); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setDoOutput(true); 
     conn.setRequestMethod("POST"); 
     conn.setRequestProperty("Content-Type", "application/json"); 
       if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) { 
      throw new RuntimeException("Failed : HTTP error code : " 
       + conn.getResponseCode()); 
     } 

我在代码中添加了以下内容,但仍遇到401错误。

   conn.setRequestProperty("username", "myusername"); 
      conn.setRequestProperty("password", "mypassword"); 
+1

[看看这个](http://stackoverflow.com/questions/9767952/how-to-add-parameters-to-httpurlconnection-using-post) – SudoRahul 2013-03-22 04:29:05

回答

1

试试这个:

String params="username=myusername&password=mypassword"; 
conn.getOutputStream().write(params.getBytes()); 
conn.getOutputStream().flush(); 
conn.getOutputStream().close(); 

或者,也许你需要编码PARAMS:

DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); 

String postContent = URLEncoder.encode("username", "UTF-8") + "=" + 
        URLEncoder.encode(myusername, "UTF-8") + "&" + 
        URLEncoder.encode("password", "UTF-8") + "=" + 
        URLEncoder.encode(mypassword, "UTF-8") ; 

dos.write(postContent.getBytes()); 
dos.flush(); 
dos.close(); 

关于Basic Authorization

String userPassword = username + ":" + password; 
String encoding = new sun.misc.BASE64Encoder().encode(userPassword.getBytes()); 
URLConnection uc = url.openConnection(); 
uc.setRequestProperty("Authorization", "Basic " + encoding); 
uc.connect(); 
+0

谢谢,但它仍然遇到错误401,我双还检查了用户名和密码。 – 2013-03-22 04:41:27

+0

@DanielMorgan HTTP 401错误代码表示请求未能提供正确的身份验证,并且已被拒绝站点访问。 – lichengwu 2013-03-22 04:49:50

+0

我知道,但服务器名称和密码是正确的 – 2013-03-22 04:53:59

相关问题