0

私はAndroidhttpのものを使用して、サーバーに登録/登録解除しています。HttpDeleteを使用するためのDELETEリクエストがあります。呼び出しようとすると、Http401の「不正な要求」エラーが発生します。なぜそれが起こっているのか私にはわかりません。私を助けてください。

これが私のコードです:

HttpUtils.java

private BasicHttpParams mParams;
private UsernamePasswordCredentials mCredentials = null;
private ResponseHandler mResponseHandler = null;

public void setUserCredentials(String userName, String password) {
     this.mCredentials = new UsernamePasswordCredentials(userName, password);
}

public void setResponseHandler(ResponseHandler responseHandler){
    this.mResponseHandler = responseHandler;
}

public Result<String> delete(String url){
    Result<String> result = new Result<T>();
    result.setStatus(Result.FAIL);

        try {
         DefaultHttpClient httpClient = new DefaultHttpClient(mParams);
         httpClient.setParams(mParams);
         httpClient.getCredentialsProvider().setCredentials(new AuthScope(null, -1), mCredentials);

         HttpResponse response = httpClient.execute(new HttpDelete(url));
         result.setResult(mResponseHandler.handleResponse(response));
         result.setStatus(Result.SUCCESS);
    } catch (IllegalArgumentException e) {
          e.printStackTrace();
          result.setMessage(e.getMessage());
    } catch (ClientProtocolException e) {
          e.printStackTrace();
          result.setMessage(e.getMessage());
    } catch (ConnectTimeoutException e) {
          result.setMessage("Connection timed out.");
    } catch (IOException e) {
          e.printStackTrace();
          result.setMessage(e.getMessage());
    } 

    return result;
}

UnregisterTask.java
    @Override
    protected Void doInBackground(String... urls) {
        if (urls==null || urls.length!=1)
            return null;

        String url = urls[0];

                HttpUtils httpUtils = new HttpUtils();
                httpUtils.setUserCredentials("userid", "password");
                httpUtils.setResponseHandler(new UnrgisterHandler());
        httpUtils.delete(url);

        Result<String> result = aClient.delete(url);
        if (result!=null || result.result != null){
                     //Do Something
                 }

    }


//UnrgisterActivity.java

public void onUnregisterButtonClick(View view){
     UnregisterTask task = new UnregisterTask(this);
     task.execute(ServerConfig.getIdmServer() + ServerConfig.DELETE_DEVICE + "myid");
}

エラーが発生しました:

Apache Tomcat/7.0.26-エラーレポート

HTTPステータス400-

タイプステータスレポート

メッセージ

descriptionクライアントから送信された要求は構文的に正しくありませんでした()。

Apache Tomcat / 7.0.26

前もって感謝します。

4

1 に答える 1

0

自分で直したのですが、なぜエラーが発生したのかはっきりとわかりません。基本認証の設定方法を検索した後、コードを変更しました。

public Result<T> delete(String url)

        Result<T> result = new Result<T>();
        result.setStatus(Status.FAIL);

        try {
            DefaultHttpClient http = new DefaultHttpClient();

            if (this.mCredentials!=null){
                CredentialsProvider credProvider = new BasicCredentialsProvider();
                credProvider.setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), this.mCredentials);
                http.setCredentialsProvider(credProvider);
            }

            HttpDelete delete = new HttpDelete(url);
            //delete.setEntity(new StringEntity(data, "UTF8"));
            delete.addHeader("Content-type", JSON_TYPE);
            HttpResponse response = http.execute(delete);
            result.setResult(mResponseHandler.handleResponse(response));
            result.setStatus(Result.Status.SUCCESS);

        } catch (IllegalArgumentException e) {
            e.printStackTrace();
            result.setMessage(e.getMessage());
        } catch (ClientProtocolException e) {
            e.printStackTrace();
            result.setMessage(e.getMessage());
        } catch (ConnectTimeoutException e) {
            result.setMessage("Connection timed out.");
        } catch (IOException e) {
            e.printStackTrace();
            result.setMessage(e.getMessage());
        } 

        return result;
    }

少しまだ混乱しています。とにかく、今では魅力的です。

于 2012-10-17T05:51:19.967 に答える