diff --git a/webservice.go b/webservice.go
new file mode 100644
index 0000000..83e9780
--- /dev/null
+++ b/webservice.go
@@ -0,0 +1,75 @@
+package swwebservice
+
+func dailTimeout(network, addr string) (net.Conn, error) {
+	default_timeout := time.Duration(theSession.DefaultTimeout) * time.Second
+	return net.DialTimeout(network, addr, default_timeout)
+}
+
+type WebSession struct {
+	AppId          string
+	AppSecret      string
+	BaseUrl        string
+	DefaultTimeout int
+	session_key    string
+}
+
+func (w *WebSession) DoGet(uri string, params map[string]string) (*http.Response, error) {
+	transport := http.Transport{Dial: dailTimeout}
+
+	client := http.Client{Transport: &transport}
+
+	full_url := w.BaseUrl + uri
+
+	vl := url.Values{}
+	vl.Add("app_id", w.AppId)
+	ts := w.GetTimestamp()
+	vl.Add("timestamp", ts)
+
+	if params != nil {
+		for k, v := range params {
+			vl.Add(k, v)
+		}
+	}
+	vl.Add("sign", w.Sign(ts, vl.Encode()))
+	full_url = full_url + "?" + vl.Encode()
+	return client.Get(full_url)
+}
+
+func (w *WebSession) GetTimestamp() string {
+	t := time.Now()
+	return fmt.Sprintf("%04d%02d%02d%02d%02d%02d", t.Year(), t.Month(), t.Day(),
+		t.Hour(), t.Minute(), t.Second())
+}
+
+func (w *WebSession) Sign(timestamp, query_string string) string {
+	return "122123123"
+}
+
+func (w *WebSession) DoPost(uri string, param map[string]string, json_data []byte) (*http.Response, error) {
+	transport := http.Transport{Dial: dailTimeout}
+	client := &http.Client{Transport: &transport}
+	vl := url.Values{}
+	vl.Add("app_id", w.AppId)
+	ts := w.GetTimestamp()
+	vl.Add("timestamp", ts)
+	vl.Add("sign", w.Sign(ts, vl.Encode()))
+	if param != nil {
+		for k, v := range param {
+			vl.Add(k, v)
+		}
+	}
+	if json_data != nil {
+		vl.Add("request_data", string(json_data))
+	}
+	full_url := w.BaseUrl + uri
+	log.Debugf("Url=%v", full_url)
+	r, err := client.Post(full_url, "application/x-www-form-urlencoded", bytes.NewReader([]byte(vl.Encode())))
+	if err != nil || r.StatusCode != 200 {
+		log.Errorf("Status=%v, err=%v", r, err)
+	}
+	return r, err
+}
+
+func (w *WebSession) Auth() error {
+	return nil
+}
