2010-11-23 47 views
2

我正确地发送HTTPPost了吗?我正在检查我的网络服务器的encodedAuthString,并验证字符串是否正确。不知道为什么我无法验证。在Java中发送HTTP头问题

public JSONObject connect(String url) { 
      HttpClient httpclient = new DefaultHttpClient(); 

      // Prepare a request object 
      HttpPost httppost = new HttpPost(url); 

      String authString = usernameEditText.getText().toString() + ":" + passwordEditText.getText().toString(); 
      String encodedAuthString = Base64.encodeToString(authString.getBytes(),Base64.DEFAULT); 
      String finalAuthString = "Basic " + encodedAuthString; 

      // Execute the request 
      HttpResponse response; 
      try { 
       httppost.addHeader("Authorization", finalAuthString); 

       response = httpclient.execute(httppost); 
       // Examine the response status 
       Log.i("Praeda", response.getStatusLine().toString()); 

       // Get hold of the response entity 
       HttpEntity entity = response.getEntity(); 

       if (entity != null) { 

        // A Simple JSON Response Read 
        InputStream instream = entity.getContent(); 
        String result = convertStreamToString(instream); 

        // A Simple JSONObject Creation 
        JSONObject json = new JSONObject(result); 

        // Closing the input stream will trigger connection release 
        instream.close(); 

        return json; 
       } 

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

      return null; 
     } 

     @Override 
     protected JSONObject doInBackground(String... urls) { 
      return connect(urls[0]); 
     } 

     @Override 
     protected void onPostExecute(JSONObject json) { 
      String authorized = "200"; 
      String unauthorized = "401"; 
      String notfound = "404"; 
      String status = new String(); 

      try { 
       // Get the messages array 
       JSONObject response = json.getJSONObject("response"); 
       status = response.getString("status"); 

       if(status.equals(authorized)) 
        Toast.makeText(getApplicationContext(), "Authorized",Toast.LENGTH_SHORT).show(); 
       else if (status.equals(unauthorized)) 
        Toast.makeText(getApplicationContext(), "Unauthorized",Toast.LENGTH_SHORT).show(); 
       else if(status.equals(notfound)) 
        Toast.makeText(getApplicationContext(), "Not found",Toast.LENGTH_SHORT).show(); 

      } catch (JSONException e) { 
       System.out.println(e); 
      } catch (NullPointerException e) { 
       System.out.println(e); 
      } 
     } 
    } 

UPDATE:

当我硬编码的编码字符串,一切都很好。

当我使用的Base64编码器,我得到了相同的结果编码字符串,但服务器返回一个401

回答

4

你是不是在这个代码中设置任何头。使用setHeader()来设置标题。 HttpClient的documentation也包含这一点,您的previous question的信息也是如此。

Here is a sample project设置授权标头。请注意,它使用单独的Base64编码器,因为内置的编码器仅在Android 2.2,IIRC中出现。

+0

即使我尝试setHeader()它不起作用。 – 2010-11-23 01:24:23

0

我在字符串中看到额外\n,所以不是使用默认选项,我用no_wrap选项是这样的:

Base64.encodeToString(authordata.getBytes(),Base64.NO_WRAP);

它为我工作。