หน้าเว็บ

วันพุธที่ 7 มีนาคม พ.ศ. 2555

HttpRequest android

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

import android.util.Log;
public class HttpRequest {

    private DefaultHttpClient httpClient;
    private HttpContext localContext;
    private String ret;
    private HttpResponse response = null;
    private HttpPost httpPost = null;
    private HttpGet httpGet = null;

    public HttpRequest() {
        HttpParams myParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(myParams, 10000);
        HttpConnectionParams.setSoTimeout(myParams, 10000);
        httpClient = new DefaultHttpClient(myParams);
        localContext = new BasicHttpContext();
    }

    public void clearCookies() {
        httpClient.getCookieStore().clear();
    }

    public void abort() {
        try {
            if (httpClient != null) {
                System.out.println("Abort.");
                httpPost.abort();
            }
        } catch (Exception e) {
            System.out.println("Your App Name Here" + e);
        }
    }

    public String sendPost(String url, String data) {
        return sendPost(url, data, null);
    }

    public String sendJSONPost(String url, JSONObject data) {
        return sendPost(url, data.toString(), "application/json");
    }

    public String sendPost(String url, String data, String contentType) {
        ret = null;
        httpClient.getParams().setParameter(
                ClientPNames.COOKIE_POLICY,
                CookiePolicy.RFC_2109);

        httpPost = new HttpPost(url);
        response = null;

        StringEntity tmp = null;

        Log.d("Your App Name Here", "Setting httpPost headers");

        httpPost.setHeader("User-Agent", "SET YOUR USER AGENT STRING HERE");
        httpPost.setHeader("Accept", "text/html,application/xml,application/xhtml+xml,text/html;q = 0.9,text / plain;q = 0.8,image / png,*/*;q=0.5");

        if (contentType != null) {
            httpPost.setHeader("Content-Type", contentType);
        } else {
            httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
        }

        try {
            tmp = new StringEntity(data, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            Log.e("Your App Name Here", "HttpUtils : UnsupportedEncodingException : " + e);
        }

        httpPost.setEntity(tmp);

        Log.d("Your App Name Here", url + "?" + data);

        try {
            response = httpClient.execute(httpPost, localContext);

            if (response != null) {
                ret = EntityUtils.toString(response.getEntity());
            }
        } catch (Exception e) {
            Log.e("Your App Name Here", "HttpUtils: " + e);
        }

        Log.d("Your App Name Here", "Returning value:" + ret);

        return ret;
    }

    public String sendGet(String url) {
        httpGet = new HttpGet(url);
        ret = null;

        try {
            response = httpClient.execute(httpGet);
        } catch (Exception e) {
            Log.e("Your App Name Here", e.getMessage());
        }

        //int status = response.getStatusLine().getStatusCode();  

        // we assume that the response body contains the error message  
        try {
            if (response != null) {
                ret = EntityUtils.toString(response.getEntity());
            }
        } catch (IOException e) {
            Log.e("Your App Name Here", e.getMessage());
        }

        return ret;
    }

    public InputStream getHttpStream(String urlString) throws IOException {
        InputStream in = null;
        int response = -1;

        URL url = new URL(urlString);
        URLConnection conn = url.openConnection();

        if (!(conn instanceof HttpURLConnection)) {
            throw new IOException("Not an HTTP connection");
        }

        try {
            HttpURLConnection httpConn = (HttpURLConnection) conn;
            httpConn.setAllowUserInteraction(false);
            httpConn.setInstanceFollowRedirects(true);
            httpConn.setRequestMethod("GET");
            httpConn.connect();

            response = httpConn.getResponseCode();

            if (response == HttpURLConnection.HTTP_OK) {
                in = httpConn.getInputStream();
            }
        } catch (Exception e) {
            throw new IOException("Error connecting");
        } // end try-catch

        return in;
    }
}


        เอาอย่างนี้น่ะครับ  คือว่า  เราไม่ต้องสนใจว่า  ตัวโปรแกรม  มันจะใช้คำสั่งอะไร มีคอนเน็คชัน อะไรบ้าง ขอให้รู้แค่วิธีใช้งานมันก็พอน่ะครับ  เพราะมันก็เยอะอยู่ ^^ ถ้าจะอธิบาย
เดี๋ยวค่อยไปหาศึกษาเอาเองน่ะครับ
ผมขออธิบายวิธิใช้เลยแล้วกันครับ
        รู้อยู่อย่างแรกว่า อันนี้เป็น class ที่ถูกเขียนสำเร็จรูปไว้  สามารถนำไปใช้งานได้ทันทีน่ะครับ
1. สร้าง object httpRequest ขึ้นมาดังนี้
        HttpRequest http = new HttpRequest();
2. เราอยากจะใช้ object นี้ทำหน้าที่อะไร  ก็ใช้งานตาม method ที่มีอยู่ครับ ดังนี้

        -public String sendPost(String url, String data) {}
หน้าที่คือโพสต์ข้อมูลไปยัง web server โดยมีพารามิเตอร์เป็น url web server กับ data ที่จะส่งไป  ดังนี้
        String receive = http.sendPost("http://na5cent.blogspot.com", "x=1&y=2&z=3");
ประมาณนี้ครับ  ฝั่ง server ก็ post ค่ารับเอา  ถ้า server มีอะไรส่งกลับมา  ก็จะมาลงอยู่ที่ receive

        -public String sendJSONPost(String url, JSONObject data) {}
อันนี้เหมือนข้างบน  แต่ข้อมูลที่ส่งไป  อยู่ในรูปของ json ครับ

       -public String sendPost(String url, String data, String contentType) {}
อันนี้ก็เหมือนอันแรก  แค่มีการ set content type ด้วยแค่นั้นเอง

       -public String sendGet(String url) {}
อันนี้ทำหน้าที่รับข้อมูลมาจาก server การใช้งาน  มีดังนี้
        String receive = http.sendGet("http://na5cent.blogspot.com");

       - public InputStream getHttpStream(String urlString) throws IOException { }
อันนี้ใช้สำหรับการรับค่าที่เป็น stream มาจาก server เช่นพวก รูปภาพหรือไฟล์ต่างๆ ที่ server ส่งกลับมาในรูปของ stream ครับ วิธีใช้
        InputStream receiveStream = null;
        try{
                 receiveStream = http.getHttpStream("http://na5cent.blogspot.com/test.png");
        }catch(IOException e){
                 ...
        }finally{
                ...
                try{
                        receiveStream.close();
                }catch(IOException e){
                        ...
                }
        }

       -public void abort() {}
ยกเลิกการเชื่อมต่อ  วิธีใช้   http.abort();
     
       -public void clearCookies() {}
เคลียร์คุกกี้ครับ  วิธีใช้ http.clearCookies();

       คิดว่าพอใช้เป็นน่ะครับ
มันก็ยังต้องมีการเขียนปรับปรุงเพิ่มเติมอีกบ้าง   แต่ก็พอทำงานได้
เพราะผมเองก็ใช้ในการรับส่งข้อมูลระหว่าง client server(android กับ php)  มาแล้ว


1 ความคิดเห็น: