Получить ответ HTML после отправки данных POST через BlackBerry - PullRequest
2 голосов
/ 07 марта 2012

Мне нужно прочитать ответ HTML с URL-адреса после отправки ему данных POST.У меня уже есть следующие две функции, но я не знаю, как их объединить, чтобы я мог отправлять данные POST и получать ответ.

Эта функция получает стандартный ответ HTML:

public static String getDataFromUrl(String url) throws IOException {
    System.out.println("------------FULL URL = " + url + " ------------");
    StringBuffer b = new StringBuffer();
    InputStream is = null;
    HttpConnection c = null;

    long len = 0;
    int ch = 0;
    c = (HttpConnection) Connector.open(url);
    is = c.openInputStream();
    len = c.getLength();
    if (len != -1) {
        // Read exactly Content-Length bytes
        for (int i = 0; i < len; i++)
            if ((ch = is.read()) != -1) {
                b.append((char) ch);
            }
    } else {
        // Read until the connection is closed.
        while ((ch = is.read()) != -1) {
            len = is.available();
            b.append((char) ch);
        }
    }

    is.close();
    c.close();
    return b.toString();
}

Эта функция отправляет данные POST на URL:

void postViaHttpConnection(String url) throws IOException {
    HttpConnection c = null;
    InputStream is = null;
    OutputStream os = null;
    int rc;

    try {
        c = (HttpConnection) Connector.open(url);

        // Set the request method and headers
        c.setRequestMethod(HttpConnection.POST);
        c.setRequestProperty("If-Modified-Since", "29 Oct 1999 19:43:31 GMT");
        c.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.0");
        c.setRequestProperty("Content-Language", "en-US");

        // Getting the output stream may flush the headers
        os = c.openOutputStream();
        os.write("LIST games\n".getBytes());
        os.flush(); // Optional, getResponseCode will flush

        // Getting the response code will open the connection,
        // send the request, and read the HTTP response headers.
        // The headers are stored until requested.
        rc = c.getResponseCode();
        if (rc != HttpConnection.HTTP_OK) {
            throw new IOException("HTTP response code: " + rc);
        }

        is = c.openInputStream();

        // Get the ContentType
        String type = c.getType();
        processType(type);

        // Get the length and process the data
        int len = (int) c.getLength();
        if (len > 0) {
            int actual = 0;
            int bytesread = 0;
            byte[] data = new byte[len];
            while ((bytesread != len) && (actual != -1)) {
                actual = is.read(data, bytesread, len - bytesread);
                bytesread += actual;
            }
            process(data);
        } else {
            int ch;
            while ((ch = is.read()) != -1) {
                process((byte) ch);
            }
        }
    } catch (ClassCastException e) {
        throw new IllegalArgumentException("Not an HTTP URL");
    } finally {
        if (is != null)
            is.close();
        if (os != null)
            os.close();
        if (c != null)
            c.close();
    }
}

Поэтому мне нужно знать, как их объединить, чтобы получить ответ ПОСЛЕ отправки данных POST.

1 Ответ

1 голос
/ 07 марта 2012

Попробуйте следующий код и сообщите мне о проблемах с муравьями

Примечание: расширение Url важно (здесь я использую только для Wi-Fi, например: "; interface = wifi")

import java.io.InputStream;
import java.io.OutputStream;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;

import net.rim.blackberry.api.browser.URLEncodedPostData;
import net.rim.device.api.io.http.HttpProtocolConstants;

public class HttpPostSample {
    HttpConnection hc = null;
    StringBuffer stringBuffer = new StringBuffer();
    InputStream inputStream;

    public HttpPostSample(String url) {
        try{
            hc = (HttpConnection)Connector.open(url+";interface=wifi");//you have to use connection extension ";interface=wifi" this is only for wifi 
            URLEncodedPostData oPostData = new URLEncodedPostData(URLEncodedPostData.DEFAULT_CHARSET, false);
            //These are your appending values and tags 
            oPostData.append("property_id","value");
            oPostData.append("property_name","value");
            oPostData.append("category","value");
            oPostData.append("address","value");
            oPostData.append("country","value");
            hc.setRequestMethod(HttpConnection.POST);
            hc.setRequestProperty(HttpProtocolConstants.HEADER_CONTENT_TYPE, oPostData.getContentType());
            byte [] postBytes = oPostData.getBytes();
            hc.setRequestProperty(HttpProtocolConstants.HEADER_CONTENT_LENGTH, Integer.toString(postBytes.length));
            OutputStream strmOut = hc.openOutputStream();
            strmOut.write(postBytes);
            strmOut.flush();
            strmOut.close();

            String returnMessage = hc.getResponseMessage();
            System.out.println("============"+returnMessage);
            if(hc.getResponseCode()==HttpConnection.HTTP_OK)
            {
                inputStream = hc.openInputStream();
                int c;
                while((c=inputStream.read())!=-1)
                {
                    stringBuffer.append((char)c);
                }
                System.out.println(">>>>>>>>>>>>>>>>>"+stringBuffer.toString());
                parseResults(stringBuffer.toString());

            }else{
                parseResults("ERROR");
            }


        }catch (Exception e) {
            // TODO: handle exception
        }
    }
    private void parseResults(String response)
    {
        if(response.equalsIgnoreCase("ERROR"))
        {
            System.out.println("Error in Connection please check your internet and Connection extension");
        }else{
            System.out.println(response);
        }
    }

}

Вы можете вызвать вышеуказанную функцию как

HttpPostSample post=new HttpPostSample(url);

вы можете увидеть результат в методе parseResults консоли

...