2

我已经使用AppacheHttpClient完成了以下客户端应用程序来使用 REST 服务(一种 PUT 方法) (它正在工作):

    public class UserLogin {

    private static final String URL = "http://192.168.1.236:8080/LULServices/webresources";

    public static void main(String[] args) throws Exception {

    final DefaultHttpClient httpclient = new DefaultHttpClient();

    try {
            httpclient.getCredentialsProvider().setCredentials(
                new AuthScope("localhost", 8080),
                new UsernamePasswordCredentials("xxxxx", "xxxxx"));

    HttpPut httpPut = new HttpPut(URL + "/services.users/login");
    HttpConnectionParams.setConnectionTimeout(httpclient.getParams(), 10000);

    httpPut.addHeader("Content-type", "multipart/form-data");

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("login", "xxxxx"));
    nameValuePairs.add(new BasicNameValuePair("password", "xxxxx"));

    httpPut.setEntity(new UrlEncodedFormEntity(nameValuePairs));

    HttpResponse response = httpclient.execute(httpPut);

    try {
            HttpEntity entity = response.getEntity();
            String putResponse = EntityUtils.toString(entity);
            System.out.println("Login successful! Secret id: " + putResponse);
            EntityUtils.consume(entity);

        } finally {
            httpPut.releaseConnection();
        }

        } finally {
            httpclient.getConnectionManager().shutdown();
        }
    }
}

现在我想做同样的事情,使用HttpUrlConnection,但不工作:

    public class PUTmethod {

    public static void main(String[] args) throws Exception
    {
        HttpURLConnection urlConnection = null;

    try {
        String webPage = "http://localhost:8080/LULServices/webresources/services.users/login";

                Authenticator myAuth = new Authenticator() 
                {
                  final static String USERNAME = "xxxxx";
                  final static String PASSWORD = "xxxxx";

                  @Override
                  protected PasswordAuthentication getPasswordAuthentication()
                  {
                    return new PasswordAuthentication(USERNAME, PASSWORD.toCharArray());
                  }
                };

                Authenticator.setDefault(myAuth);

        URL urlToRequest = new URL(webPage);
        urlConnection = (HttpURLConnection) urlToRequest.openConnection();

                urlConnection.setReadTimeout(10000);
                urlConnection.setConnectTimeout(15000);
                urlConnection.setRequestMethod("PUT");
                urlConnection.setRequestProperty("Content-type", "multipart/form-data");
                urlConnection.setDoOutput(true);
                urlConnection.setDoInput(true);

                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                nameValuePairs.add(new BasicNameValuePair("login", "xxxxx"));
                nameValuePairs.add(new BasicNameValuePair("password", "xxxxx"));

                OutputStream out = urlConnection.getOutputStream();
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
                writer.write(getQuery(nameValuePairs));
                writer.close();
                out.close();

                urlConnection.connect();

    } catch (MalformedURLException e) {
            e.printStackTrace();
    } catch (IOException e) {
            System.out.println("Failure processing URL");
            e.printStackTrace();
    } catch (Exception e) {
            e.printStackTrace();
    }
        finally {
        if (urlConnection != null) {
            urlConnection.disconnect();
        }
    }
    }
public static String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException
    {
        StringBuilder result = new StringBuilder();
        boolean first = true;

        for (NameValuePair pair : params)
        {
            if (first)
                first = false;
            else
                result.append("&");

            result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
            result.append("=");
            result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
        }
        System.out.println(result.toString());
        return result.toString();
    }        
}

不工作是指没有出现错误,但 PUT 不起作用,就像我使用 ApacheHttpClient 解决方案时一样。我的代码有什么问题?

谢谢。

4

2 回答 2

1

尝试调用urlConnection.getResponseCode();afterurlConnection.connect();以强制刷新底层输出流并读取输入流。

于 2013-03-27T15:16:38.393 回答
0

尝试设置

urlConnection.setRequestProperty("Content-type", "application/x-www-form-urlencoded"); 

urlConnection.setRequestMethod("PUT");
于 2015-05-26T14:22:56.290 回答