forked from andelf/go-curl
/
misc.go
104 lines (83 loc) · 3.2 KB
/
misc.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package main
import (
"fmt"
curl "github.com/andelf/go-curl"
"os"
"reflect"
)
const endl = "\n"
func main() {
println("DEBUG chdir=>", os.Chdir("/sadf"))
ret := curl.EasyInit()
defer ret.Cleanup()
print("init =>", ret, " ", reflect.TypeOf(ret).String(), endl)
ret = ret.Duphandle()
defer ret.Cleanup()
print("dup =>", ret, " ", reflect.TypeOf(ret).String(), endl)
print("global init =>", curl.GlobalInit(curl.GLOBAL_ALL), endl)
print("version =>", curl.Version(), endl)
// debug
//print("set verbose =>", ret.Setopt(curl.OPT_VERBOSE, true), endl)
//print("set header =>", ret.Setopt(curl.OPT_HEADER, true), endl)
// auto calculate port
// print("set port =>", ret.EasySetopt(curl.OPT_PORT, 6060), endl)
fmt.Printf("XXXX debug setopt %#v \n", ret.Setopt(30000, 19).Error())
print("set timeout =>", ret.Setopt(curl.OPT_TIMEOUT, 20), endl)
//print("set post size =>", ret.Setopt(curl.OPT_POSTFIELDSIZE, 10), endl)
if ret.Setopt(curl.OPT_URL, "http://www.baidu.com:8000/") != nil {
println("set url ok!")
}
//print("set url =>", ret.Setopt(curl.OPT_URL, "http://commondatastorage.googleapis.com/chromium-browser-continuous/Linux_x64/104547/chrome-linux.zip"), endl)
print("set user_agent =>", ret.Setopt(curl.OPT_USERAGENT, "go-curl v0.0.1") == nil, endl)
// add to DNS cache
print("set resolve =>", ret.Setopt(curl.OPT_RESOLVE, []string{"www.baidu.com:8000:127.0.0.1"}) == nil, endl)
// ret.EasyReset() clean seted
// currently not finished!
//
fooTest := func(buf []byte, userdata interface{}) bool {
// buf := ptr.([]byte)
println("size=>", len(buf))
println("DEBUG(in callback)", buf, userdata)
println("data = >", string(buf))
return true
}
ret.Setopt(curl.OPT_WRITEFUNCTION, fooTest) // curl.CallbackWriteFunction(fooTest))
println("set opt!")
// for test only
code := ret.Perform()
// dump.Dump(code)
fmt.Printf("code -> %v\n", code)
println("================================")
print("pause =>", ret.Pause(curl.PAUSE_ALL), endl)
print("escape =>", ret.Escape("http://baidu.com/"), endl)
print("unescape =>", ret.Unescape("http://baidu.com/-%00-%5c"), endl)
print("unescape lenght =>", len(ret.Unescape("http://baidu.com/-%00-%5c")), endl)
// print("version info data =>", curl.VersionInfo(1), endl)
ver := curl.VersionInfo(curl.VERSION_NOW)
fmt.Printf("VersionInfo: Age: %d, Version:%s, Host:%s, Features:%d, SslVer: %s, LibzV: %s, ssh: %s\n",
ver.Age, ver.Version, ver.Host, ver.Features, ver.SslVersion, ver.LibzVersion, ver.LibsshVersion)
print("Protocols:")
for _, p := range ver.Protocols {
print(p, ", ")
}
print(endl)
println(curl.Getdate("20111002 15:05:58 +0800").String())
ret.Getinfo(curl.INFO_EFFECTIVE_URL)
ret.Getinfo(curl.INFO_RESPONSE_CODE)
ret.Getinfo(curl.INFO_FILETIME)
ret.Getinfo(curl.INFO_SSL_ENGINES)
ret.Getinfo(curl.INFO_TOTAL_TIME)
println("================================")
// ret.Getinfo(curl.INFO_SSL_ENGINES)
/* mret := curl.MultiInit()
mret.AddHandle(ret) // works
defer mret.Cleanup()
if ok, handles := mret.Perform(); ok == curl.OK {
fmt.Printf("ok=%s, handles=%d\n", ok, handles)
} else {
fmt.Printf("error calling multi\n")
}
*/
println("================================")
//println(curl.GlobalInit(curl.GLOBAL_SSL))
}