使用Android HTTP POST进行基本身份验证

时间:2014-11-04 03:04:43

标签: android

通过Android尝试HTTP POST时,基本HTTP身份验证是否有效?

在完成HTTP GET请求时,我一直在使用一些使用基本身份验证的代码,它运行正常。完成HTTP POST时,我需要使用相同的身份验证。

HttpPost request = new HttpPost(baseUrl+"events.json");
String credentials = email + ":" + password;
String base64EncodedCredentials = Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
request.setHeader("Authorization", "Basic " + base64EncodedCredentials);
request.setHeader(HTTP.CONTENT_TYPE,"application/json");

try
{
    ArrayList<NameValuePair> vars = new ArrayList<NameValuePair>(2);
    vars.add(new BasicNameValuePair("event[name]",currentEvent.name));
    vars.add(new BasicNameValuePair("event[location]",currentEvent.location));
    vars.add(new BasicNameValuePair("event[num_expected]",new Integer(currentEvent.num_expected).toString()));
    request.setEntity(new UrlEncodedFormEntity(vars));
} catch (Exception e) {
    // Log exception
    Log.e("CreateEvent", "doInBackground — " + Errors.getStackTrace(e));
}

HttpClient httpclient = new DefaultHttpClient();
try {
    HttpResponse response = httpclient.execute(request);

    if (response.getStatusLine().getStatusCode() == 200) {

        HttpEntity entity = response.getEntity();
        String responseString = EntityUtils.toString(entity, "UTF-8");

        return 1;
    }
}
catch (Exception e) {
    // Log exception
    Log.e("CreateEvent", "doInBackground — " + Errors.getStackTrace(e));
}

响应是HTTP 500错误。它没有返回任何细节,所以我无法确切地说出错误,但唯一的区别是POST和表单数据的传递。

1 个答案:

答案 0 :(得分:3)

更详细地查看您的代码,您似乎将Content-Type设置为application/json,然后发送application/x-www-form-urlencoded数据(我猜这是UrlEncodedFormEntity所做的),因此Web服务无法将数据解析为JSON。

相关问题