いや要らないだろ…と思いつつもやる必要がうっすらとでてきたのでやってみた。
ようは、クエリパラメータと POST の中身とクッキーから読み取れれば良い。
やや雑ではあるがお試しするとこんな感じになると思う。
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/http/cookiejar"
"net/url"
"time"
)
func PHP_REQUEST(r *http.Request, key string) string {
// Get parameter
if val, ok := r.URL.Query()[key]; ok {
return val[0]
}
// POST
tmp := r.PostFormValue(key)
if tmp != "" {
return tmp
}
// Cookie
for _, cookie := range r.Cookies() {
if cookie.Name == key {
return cookie.Value
}
}
return ""
}
func main() {
go func() {
http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("hoge = " + PHP_REQUEST(r, "hoge")))
})
http.ListenAndServe("0.0.0.0:8000", nil)
}()
time.Sleep(time.Millisecond)
var client *http.Client
var r *http.Response
var b []byte
// nothing
client = &http.Client{}
r, _ = client.Get("http://0.0.0.0:8000/test")
b, _ = ioutil.ReadAll(r.Body)
fmt.Println(string(b))
// get
client = &http.Client{}
r, _ = client.Get("http://0.0.0.0:8000/test?hoge=get")
b, _ = ioutil.ReadAll(r.Body)
fmt.Println(string(b))
// get / cookie
client = &http.Client{}
u, _ := url.Parse("http://0.0.0.0:8000/test")
client.Jar, _ = cookiejar.New(nil)
client.Jar.SetCookies(u, []*http.Cookie{
{
Name: "hoge",
Value: "cookie",
},
})
r, _ = client.Get("http://0.0.0.0:8000/test")
b, _ = ioutil.ReadAll(r.Body)
fmt.Println(string(b))
// post
client = &http.Client{}
v := url.Values{}
v.Add("hoge", "post")
r, _ = client.PostForm("http://0.0.0.0:8000/test", v)
b, _ = ioutil.ReadAll(r.Body)
fmt.Println(string(b))
time.Sleep(time.Millisecond)
}