2

こんにちは、Android からサーバーへのデータの投稿を試みています。使用しようとしてHttpURLConnectionいます。

ここでは、drupal で特定のユーザーのデータを入力するための認証用のユーザー名とパスワードを送信しています。また、他のさまざまな方法でデータを投稿しようとしました。DefaultHttpClient を使用していますが、うまくいきません。DefaultHttpClient を使用すると 401 エラーが発生します。

これは、私がstackoverflowで尋ねた質問のリンクです。認証エラー: 次のチャレンジのいずれにも応答できません: {} Android - 401 Unauthorized

だから助けてください。聞いてくれてありがとう。

これが私のコードです。

 public static class post_idea extends AsyncTask<Void, Void, Void> {

  String strResponse1;
  @Override
  protected void onPreExecute() {
   // TODO Auto-generated method stub
   super.onPreExecute();

   pgb.setVisibility(View.VISIBLE);
  }

  @Override
  public Void doInBackground(Void... params) {
   // TODO Auto-generated method stub


   // String url = "http://testingd7.mobileapplicationtesters.com/my_android_drupal/user/login";
      String url = "http://testingd7.mobileapplicationtesters.com/my_android_drupal/node.json";
  // String url = "http://mobiappdevelopers.com/drupal_test/my_android_drupal/node.json";
   //String url = "http://www.drupal7.mobileapplicationtesters.com/my_services/node.json";

   strResponse1 = makeWebForPostIdea(url,title,body);

   System.out.println("=========> Response from post  idea => "
     + strResponse1);

   return null;
  }

  @Override
  protected void onPostExecute(Void result) {
   // TODO Auto-generated method stub
   super.onPostExecute(result);

   pgb.setVisibility(View.GONE);


  }



public static String makeWebForPostIdea(String url123, String title,String body)
  {

      HttpURLConnection httpcon = null;

      JSONObject json = null;
      JSONObject jsonnode = null;


        try {
            JSONObject jsonvalue = new JSONObject();
            jsonvalue.put("value", body.toString());

            JSONArray array = new JSONArray();
            array.put(jsonvalue);

            jsonnode = new JSONObject();
            jsonnode.put("und", array);

            System.out.println("@@@@@@2    jsonnode=======>"+jsonnode.toString());

            json = new JSONObject();
            json.put("title",title);
            json.put("body", jsonnode);
            json.put("type","article");

            System.out.println("value of the combine node=======>"+json.toString());  


        } catch (JSONException e3) {
            // TODO Auto-generated catch block
            e3.printStackTrace();
        }

      try {
          httpcon = (HttpURLConnection) ((new URL(url123).openConnection()));
          httpcon.setDoOutput(true);
          httpcon.setRequestProperty("Content-Type", "application/json");
          httpcon.setRequestProperty("Accept", "application/json");
        httpcon.setRequestMethod("POST");

        String urlParameters =
                "type=" + URLEncoder.encode("page", "UTF-8") +
                "title=" + URLEncoder.encode(title, "UTF-8") +
                "body" + URLEncoder.encode(jsonnode.toString(), "UTF-8") ;

        httpcon.setRequestProperty("Content-Length", "" + 
                 Integer.toString(urlParameters.getBytes().length));


    } catch (ProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


      try {
        httpcon.connect();
         byte[] outputBytes = "{\"username\":\"uname\",\"password\":\"pass\"}".getBytes("UTF-8");
          OutputStream os = httpcon.getOutputStream();
          os.write(outputBytes);

          os.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;

ありがとう。

4

1 に答える 1

3

ここでコンテンツの長さを設定します。

httpcon.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));

しかし、あなたが送ったコンテンツはここから来ています:

byte[] outputBytes = "{\"username\":\"uname\",\"password\":\"pass\"}".getBytes("UTF-8");
OutputStream os = httpcon.getOutputStream();
os.write(outputBytes);

そのため、報告された Content-Length は実際のコンテンツの長さと一致しません。

httpcon.connect();途中は無視してください。既に接続しているため、何もしません。

代わりに、次のことを行う必要があります。

byte[] outputBytes = "{\"username\":\"uname\",\"password\":\"pass\"}".getBytes("UTF-8");
httpcon.setRequestProperty("Content-Length", Integer.toString(outputBytes.length()));
OutputStream os = httpcon.getOutputStream();
os.write(outputBytes);
于 2012-08-11T11:32:03.543 に答える