HttpURLConnection(與web通信的橋梁)
Posted on 2009-05-22 23:31 Gavin.lee 閱讀(1440) 評論(1) 編輯 收藏 所屬分類: java SE & EEjava 對HTTP網絡協議的資源請求,java api上是這樣說的:“每個 HttpURLConnection 實例都可用于生成單個請求,但是其他實例可以透明地共享連接到 HTTP 服務器的基礎網絡。”
說的再說都沒用,用途簡單一句話,java程序向web請求資源的。聽老前輩說我這個會有問題,說是有時候不能讀取完整數據。不過我是幸運的,用到現在沒出現問題,先不管了。
注:在這個實例開發中,我參考了很多資料,對我的幫助都很大,實例的成功要歸屬這些高手們,注釋主要參考下面這位仁兄。
http://www.aygfsteel.com/supercrsky/articles/247449.html
2009年6月29日14:07:13 PS: 對編碼機制做了點改善
package com.yixun.wap;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/**
*
* @descripte use java.net.HttpURLConnection to request resource form web.
* @author Gavin.lee
* @date 2009-5-23 12:21:00
* @version 1.0
*/
public class TransactionCenter {
private URL url;
private HttpURLConnection urlconn;

String inencoding;
String outencoding;
public TransactionCenter(String inencoding, String outencoding) {
this.inencoding = inencoding;
this.outencoding = outencoding;
}
public String connect(String params, String postUrl) {
BufferedReader br = null;
String response = "", brLine = "";
try {
//params=URLEncoder.encode(params,"GB2312"); //use URLEncoder.encode for encode the params

url = new URL(postUrl);
urlconn = (HttpURLConnection) url.openConnection();
urlconn.setRequestProperty("user-agent","mozilla/4.7 [en] (win98; i)"); //set request header
urlconn.setRequestProperty("X-Forwarded-For", "127.0.0.1");
urlconn.setConnectTimeout(30000);
urlconn.setReadTimeout(30000);
urlconn.setRequestMethod("POST"); // request method, default GET
urlconn.setUseCaches(false); //Post can not user cache
urlconn.setDoOutput(true); //set output from urlconn
urlconn.setDoInput(true); //set input from urlconn
OutputStream out = urlconn.getOutputStream();
out.write(params.getBytes(outencoding));
out.flush();
out.close(); // output stream close,That's means need not to post data to this outputstream

br = new BufferedReader(new InputStreamReader(urlconn.getInputStream(), inencoding));
while((brLine = br.readLine())!=null)
response =(new StringBuilder(String.valueOf(response))).append(brLine).toString();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(br != null) {
br.close();
}
} catch (IOException e) {
System.out.println("input stream close fail");
}
urlconn.disconnect();
}
return response;
}

public static void main(String[] args) {
TransactionCenter tc = new TransactionCenter("GBK", "GBK");
String response = tc.connect("c_id=10041&cpid=5&c_type=1&lotid=1&expect=08059","http://inter.boss.com/interface/client/requestwap.php?");
System.out.println(response);
}
}
說的再說都沒用,用途簡單一句話,java程序向web請求資源的。聽老前輩說我這個會有問題,說是有時候不能讀取完整數據。不過我是幸運的,用到現在沒出現問題,先不管了。
注:在這個實例開發中,我參考了很多資料,對我的幫助都很大,實例的成功要歸屬這些高手們,注釋主要參考下面這位仁兄。
http://www.aygfsteel.com/supercrsky/articles/247449.html
2009年6月29日14:07:13 PS: 對編碼機制做了點改善







































































