通过android的HTTP GET请求无法正常工作

时间:2015-01-30 17:10:53

标签: android python http-get

我正在尝试编写一个简单的Android应用程序来帮助我更快更轻松地登录锻炼。

我用python做了一个POC:

import httplib
conn = httplib.HTTPConnection("whitecity.wodsignup.com")
conn.request("GET","/act.php?act=joinWOD&time=1422712800&type=wod&user=791723491%2CGil+Alin")
res = conn.getresponse()
print res.status, res.reason

我从服务器获得的结果是200 OK,并且它工作正常(工作=签署我要求的锻炼)

现在棘手的部分 - 我创建了以下应用程序:

package com.example.httpreqsample;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.graphics.Color;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {

    TextView etResponse;
    TextView tvIsConnected;
    Button go;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // get reference to the views
        etResponse = (TextView) findViewById(R.id.etResponse);
        tvIsConnected = (TextView) findViewById(R.id.tvIsConnected);
        go = (Button) findViewById(R.id.go);

        go.setOnClickListener(this);

        // check if you are connected or not
        if(isConnected()){
            tvIsConnected.setBackgroundColor(0xFF00CC00);
            tvIsConnected.setText("You are conncted");
        }
        else{
            tvIsConnected.setText("You are NOT conncted");
            tvIsConnected.setBackgroundColor(Color.RED);
        }

        // show response on the EditText etResponse 

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        // calling the GET via Button
        //etResponse.setText(GET("whitecity.wodsignup.com/act.php?act=joinWOD&time=1422412800&type=wod&user=791723491%2CGil+Alin"));
    }

    public static String GET(String url){
        InputStream inputStream = null;
        String result = "";
        try {

            // create HttpClient
            HttpClient httpclient = new DefaultHttpClient();

            // make GET request to the given URL
            HttpResponse httpResponse = httpclient.execute(new HttpGet(url));

            // receive response as inputStream
            inputStream = httpResponse.getEntity().getContent();

            // convert inputstream to string
            if(inputStream != null)
                result = convertInputStreamToString(inputStream);
            else
                result = "Did not work!";

        } catch (Exception e) {
            Log.d("InputStream", e.getLocalizedMessage());
        }

        return result;
    }

    // convert inputstream to String
    private static String convertInputStreamToString(InputStream inputStream) throws IOException{
        BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
        String line = "";
        String result = "";
        while((line = bufferedReader.readLine()) != null)
            result += line;

        inputStream.close();
        return result;

    }

    // check network connection
    public boolean isConnected(){
        ConnectivityManager connMgr = (ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isConnected()) 
                return true;
            else
                return false;   
    }

    @Override
    public void onClick(View v) {

        etResponse.setText(GET("http://whitecity.wodsignup.com/act.php?act=joinWOD&time=1422412800&type=wod&user=791723491%2CGil+Alin"));
    }

}

我能够与服务器通信,并收到以下结果:

{"code":200,"message":"Removed from lesson"}

{"code":201,"message":"All good"} 
每次我发送GET请求时,

在两者之间交替。

问题是Android解决方案似乎并没有真正起作用。 它从站点发送和接收数据,但并不像Python解决方案那样真正签约

任何想法为什么这两种方法都不会产生相同的结果?

1 个答案:

答案 0 :(得分:0)

我认为两种解决方案都可行。它就像那样的网站脚本。

请求在{"code":200,"message":"Removed from lesson"}{"code":201,"message":"All good"}之间切换,可能会在删除和订阅课程之间切换

只需转到http://whitecity.wodsignup.com/act.php?act=joinWOD&time=1422412800&type=wod&user=791723491%2CGil+Alin并刷新网站几次,即可在任何浏览器中进行检查