我需要在发送POST数据后从URL读取HTML响应。我已经有以下两个函数,但我不知道如何组合它们以便我可以发送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数据后得到响应。
答案 0 :(得分:1)
尝试以下代码并告诉我蚂蚁问题
注意:网址扩展很重要(这里我只用于wifi ex:“; 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);
你可以在console parseResults方法
中看到输出