获取HTML响应通过黑莓发送POST数据后 [英] Get HTML response after sending POST data via BlackBerry

查看:162
本文介绍了获取HTML响应通过黑莓发送POST数据后的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要它发送POST数据后读取从URL的HTML响应。我已经有以下两个功能,但我不知道如何把它们结合在一起,这样我可以发送POST数据并得到响应。

I need to read an HTML response from a URL after sending it POST data. I already have the following two functions but I don't know how to combine them so that I can send POST data AND get the response.

该函数得到一个标准的HTML响应:

This function gets a standard HTML response:

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

This function sends POST data to a 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数据的响应。

So I need to know how to combine them so that I can get the response AFTER sending POST data.

推荐答案

试试这个下面code,让我知道蚂蚁的问题。

Try this following code and let me know ant issues

注意:URL扩展名是很重要的(在这里我使用支持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);
        }
    }

}

您可以拨打上面的​​功能

You can call above function as

HttpPostSample post=new HttpPostSample(url);

您可以看到控制台parseResults方法输出

you can see the output in console parseResults Method

这篇关于获取HTML响应通过黑莓发送POST数据后的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆