Android使用POST方法获取无效的头名称

Android使用POST方法获取无效的头名称,android,http,Android,Http,一直试图调试此问题,但没有结果 我试图将自定义标题传递给我的POST请求,但我收到了错误的请求-无效的标题名称 这是我的代码: @Override protected Void doInBackground(Void... params) { // Create a new HttpClient and Post Header httpclient = new DefaultHttpClient(); httppost = new HttpPost(URL_LOGIN

一直试图调试此问题,但没有结果

我试图将自定义标题传递给我的POST请求,但我收到了错误的请求-无效的标题名称

这是我的代码:

 @Override
protected Void doInBackground(Void... params) {

    // Create a new HttpClient and Post Header
    httpclient = new DefaultHttpClient();
    httppost = new HttpPost(URL_LOGIN);

    try {

        // Building Parameters
        List<NameValuePair> params1 = new ArrayList<NameValuePair>();

        params1.add(new BasicNameValuePair(KEY_EMAIL, etEmail.getText().toString()));
        params1.add(new BasicNameValuePair(KEY_PASSWORD, etPassword.getText().toString()));

        StringBuilder sbb = new StringBuilder();
        sbb.append("{\"s\":");
        sbb.append("\"" + session_id + "\",");
        sbb.append("\"n\":");
        sbb.append("\"" + getHashKey(ts, salt) + "\",");
        sbb.append("\"t\":");
        sbb.append("\"" + ts + "\"}");


        // Set HTTPPOST with your parameters
        httppost.setEntity(new UrlEncodedFormEntity(params1));
        httppost.setHeader(Constants.DEVICE_HEADER, sbb.toString());

        // Execute HTTP Post Request
        response = httpclient.execute(httppost);

        // Setup an InputStream to handle the response.
        InputStream ips  = response.getEntity().getContent();
        BufferedReader buf = new BufferedReader(new InputStreamReader(ips,"iso-8859-1"), 8);

        // Use a reader to read the data and store it in a String builder
        StringBuilder sb = new StringBuilder();
        String s;

        while(true) {
            s = buf.readLine();
            if(s==null || s.length()==0)
                break;
                sb.append(s);
        }

        buf.close();
        ips.close();

        Log.d("User Info", sb.toString());
        JSONObject jsonObj = new JSONObject(sb.toString());
        Log.e("Is successful?", "" + jsonObj.getString(KEY_SUCCESS));

        if (jsonObj.getString(KEY_SUCCESS).equals("true")) {
            runOnUiThread(new Runnable() {
                 public void run() { 
                      Toast.makeText(LoginActivity.this, "Login successful!", Toast.LENGTH_SHORT).show();
                      i = new Intent(LoginActivity.this, DashboardActivity.class);
                        startActivity(i);
                 }
             });
        } else {
            runOnUiThread(new Runnable() {
                 public void run() { 
                     Toast.makeText(LoginActivity.this, "Unauthorized user", Toast.LENGTH_SHORT).show();
                 }
             });
        }

    } catch (ClientProtocolException e) {
         e.printStackTrace();
    } catch (IOException e) {
         e.printStackTrace();
    } catch (Exception e) {
         e.printStackTrace();
    }

        return null;
} 
@覆盖
受保护的Void doInBackground(Void…参数){
//创建一个新的HttpClient和Post头
httpclient=新的DefaultHttpClient();
httppost=新的httppost(URL\u登录);
试一试{
//建筑参数
List params1=new ArrayList();
params1.add(新的BasicNameValuePair(KEY_EMAIL,etEmail.getText().toString());
添加(新的BasicNameValuePair(KEY_PASSWORD,etPassword.getText().toString());
StringBuilder sbb=新的StringBuilder();
sbb.附加(“{\'s\”:”);
sbb.append(“\”+会话id+“\”,”);
sbb.追加(“\”n\“:”);
sbb.append(“\”+getHashKey(ts,salt)+“\”,”);
sbb.追加(“\”t\“:”);
sbb.append(“\”+ts+“\”}”);
//使用您的参数设置HTTPPOST
setEntity(新的UrlEncodedFormEntity(params1));
setHeader(Constants.DEVICE_HEADER,sbb.toString());
//执行HTTP Post请求
response=httpclient.execute(httppost);
//设置InputStream以处理响应。
InputStream ips=response.getEntity().getContent();
BufferedReader buf=新的BufferedReader(新的InputStreamReader(ips,“iso-8859-1”),8);
//使用读取器读取数据并将其存储在字符串生成器中
StringBuilder sb=新的StringBuilder();
字符串s;
while(true){
s=buf.readLine();
如果(s==null | | s.length()==0)
打破
某人追加;
}
buf.close();
ips.close();
Log.d(“用户信息”,sb.toString());
JSONObject jsonObj=新的JSONObject(sb.toString());
Log.e(“是否成功?”,“”+jsonObj.getString(KEY_SUCCESS));
if(jsonObj.getString(KEY_SUCCESS).equals(“true”)){
runOnUiThread(新的Runnable(){
public void run(){
Toast.makeText(LoginActivity.this,“登录成功!”,Toast.LENGTH_SHORT.show();
i=新意图(LoginActivity.this、DashboardActivity.class);
星触觉(i);
}
});
}否则{
runOnUiThread(新的Runnable(){
public void run(){
Toast.makeText(LoginActivity.this,“未授权用户”,Toast.LENGTH_SHORT.show();
}
});
}
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}捕获(例外e){
e、 printStackTrace();
}
返回null;
} 
我的标题名是设备,但奇怪的是,我连续几天都收到这个错误。有什么想法吗?我非常感谢你的帮助。谢谢

这是日志cat错误消息:

10-27 11:41:11.383: D/User Info(18162): <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"><HTML><HEAD><TITLE>Bad Request</TITLE><META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD><BODY><h2>Bad Request - Invalid Header</h2><hr><p>HTTP Error 400. The request has an invalid header name.</p>   </BODY></HTML>
10-27 11:41:11.383:D/用户信息(18162):错误请求错误请求-无效头
HTTP错误400。请求的标头名称无效。


我发现了问题。我的一个变量中有一个尾随空格

因此,为了解决这个问题

nonce.trim();

您正在尝试连接的是您自己开发的Web服务吗?您尝试过指定内容类型吗?@momo是的,我正在尝试连接到我的Web服务。我还尝试指定内容类型客户端代码在我看来很好。你试过卷发、邮递员或类似的吗?此时,我将在服务器中调试或启用详细日志记录,以查看发生了什么。如果服务器不在生产环境中,我甚至会尝试将标题名称从设备更改为另一个值,以查看错误消息是否确实与名称有关。@momo但如果我硬编码标题名称和值,它就会工作。如果我使用StringBuilderTry printing Constants.DEVICE\u头来确保它是没有空格或奇怪字符的“设备”,我不知道为什么它不起作用。尝试打印JSON以确保没有忘记任何引号(尽管看起来它是正确的)