Autore Topic: Problemi stranissimi con HttpPost riconosciuto come GET da server php  (Letto 359 volte)

Offline ottaviane

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    i9100
  • Sistema operativo:
    CM
Salve a tutti.
Sto impazzendo con un pezzo di codice che non vuole funzionare: esso invia dei parametri col metodo HttpPost
ad un server dove ho messo un altro programmino in php. Il punto è che il codice in php
mi riconosce come se inviassi un GET e non un POST.
Allego il codice:
La MainActivity
Codice: [Seleziona]
package com.post_example;

import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
    PostClass poster;
    EditText text;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {       
        //StrictMode.enableDefaults();       
        super.onCreate(savedInstanceState);   
       
        setContentView(R.layout.activity_main);
        text= (EditText) findViewById(R.id.editText1);
       
        Button button= (Button) findViewById(R.id.button1);
        button.setOnClickListener
            (
             new View.OnClickListener() 
             {
                @Override
                 public void onClick(View v)
                 {
                    poster=new PostClass();
                    poster.AddArgument("Get","A0");
                    poster.AddArgument("Set","B0");
                    poster.AddArgument("Unset","B1");
                    String st=text.getText().toString();
                    poster.Url=st;
                    poster.execute(((Void) null));
                    st=poster.Response;
                    //Log.d("POST:",st);
                 }
             }   
            );
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}


La classe da me creata:
Codice: [Seleziona]
package com.post_example;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.os.AsyncTask;
import android.util.Log;

public class PostClass extends AsyncTask<Void, Void, Boolean>
{
    HttpClient client;
    HttpPost post ;
    List<NameValuePair> pairs = new ArrayList<NameValuePair>();
    String Response;
    String Url;
    @Override
    protected void onPreExecute()
    {
    }   
    @Override
    protected void onProgressUpdate(Void[] values)
    {

    };
    void AddArgument(String key, String value)
    {
        pairs.add(new BasicNameValuePair(key, value));       
    }
    @Override
    protected Boolean doInBackground(Void... arg0)
    {
        if(!Url.startsWith("http://")) Url="http://"+Url;
        try
        {
           URI uri = new URI(Url);       
           client = new DefaultHttpClient();   
           post = new HttpPost(uri);
           try
           {
               post.setEntity(new UrlEncodedFormEntity(pairs));
               Log.d("Pairs:",String.valueOf(pairs.size()));
           }
           catch (UnsupportedEncodingException e)
           {
               e.printStackTrace();
           }       
           try
           {
               Log.d("Method_NAME",post.METHOD_NAME);
               HttpResponse response = client.execute(post);
               HttpEntity entity = response.getEntity();
               InputStream is = entity.getContent();
               BufferedReader reader = new BufferedReader(new InputStreamReader(is));
               StringBuilder sb = new StringBuilder();

                String line = null;
                try {
                    while ((line = reader.readLine()) != null) {
                        sb.append((line + "\n"));
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }               
               Response=sb.toString();   
           }
           catch (ClientProtocolException e)
           {
               // TODO Auto-generated catch block
               Log.e("ERROREEEE","Minkia!!!");
               e.printStackTrace();
           }
           catch (IOException e)
           {
               // TODO Auto-generated catch block
               Log.e("ERROREEEE22222","Minkia!!!");
               e.printStackTrace();
           }
        } catch (URISyntaxException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
       
        return true;
    }
    @Override
    protected void onPostExecute(final Boolean success)
    {
        Log.d("POST:",Response);
        //if(dialog.isShowing()) dialog.dismiss();
    }

    @Override
    protected void onCancelled()
    {
        //mAuthTask = null;
    }
   

}


L'AndroidManifest
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.post_example"
    android:versionCode="1"
    android:versionName="1.0" >
   
   
<uses-permission android:name="android.permission.INTERNET" />


    <uses-sdk
        android:minSdkVersion="17"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


Il codice php caricato sul server con indirizzo 192.168.1.210/poster
Codice: [Seleziona]
 
<?php

  if ($REQUEST_METHOD=="POST")
  {
      echo"Metodo POST ";
      $HTTP_STR=$HTTP_POST_VARS;
  }
  else
  {
     echo"Metodo GET ";
     $HTTP_STR=$HTTP_GET_VARS;
  }

   echo "Ciao by Giovanni\n\r";
   
  while(list($chiave,$valore)=each($HTTP_STR))
  {
    echo "$chiave=$valore   ";
  } 
  echo "Addio\n\r";
?>
 


il logcat
Codice: [Seleziona]
02-17 14:34:35.770: D/Pairs:(7617): 3
02-17 14:34:35.770: D/Method_NAME(7617): POST
02-17 14:34:35.840: D/POST:(7617):   
02-17 14:34:35.840: D/POST:(7617): Metodo GET Ciao by Giovanni
02-17 14:34:35.840: D/POST:(7617): Addio
02-17 14:34:35.840: D/POST:(7617): 


Notare che dal logcat si evince che il server php mi risponde come se io avessi inviato un GET.
Eppure inviando un post da un normale browser esso funziona.
Chi mi aiuta?
Grazie.ciao.

Post unito: 17 Febbraio 2015, 15:56:48 CET
Ho risolto.... ho trovato l'errore......
ecco come ho risolto:
il valore della variabile uri
Codice (Java): [Seleziona]
post = new HttpPost(uri);
era http://192.168.1.210/poster[/url]

e l'ho aggiustata in
http://192.168.1.210/poster/index.php]
[url]http://192.168.1.210/poster/index.php

ora funziona!
« Ultima modifica: 17 Febbraio 2015, 15:56:49 CET da ottaviane, Reason: Merged DoublePost »