mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
65 lines
1.2 KiB
Go
65 lines
1.2 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"github.com/golang/protobuf/proto"
|
||
|
"io/ioutil"
|
||
|
"net/http"
|
||
|
)
|
||
|
|
||
|
func InitFetch() {
|
||
|
Sub("fetch", func(buf []byte) []byte {
|
||
|
msg := &Msg{}
|
||
|
check(proto.Unmarshal(buf, msg))
|
||
|
switch msg.Command {
|
||
|
case Msg_FETCH_REQ:
|
||
|
return Fetch(
|
||
|
msg.FetchReqId,
|
||
|
msg.FetchReqUrl)
|
||
|
default:
|
||
|
panic("[fetch] Unexpected message " + string(buf))
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func Fetch(id int32, targetUrl string) []byte {
|
||
|
logDebug("Fetch %d %s", id, targetUrl)
|
||
|
async(func() {
|
||
|
resMsg := &Msg{
|
||
|
Command: Msg_FETCH_RES,
|
||
|
FetchResId: id,
|
||
|
}
|
||
|
|
||
|
resp, err := http.Get(targetUrl)
|
||
|
if err != nil {
|
||
|
resMsg.Error = err.Error()
|
||
|
PubMsg("fetch", resMsg)
|
||
|
return
|
||
|
}
|
||
|
if resp == nil {
|
||
|
resMsg.Error = "resp is nil "
|
||
|
PubMsg("fetch", resMsg)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
resMsg.FetchResStatus = int32(resp.StatusCode)
|
||
|
logDebug("fetch success %d %s", resMsg.FetchResStatus, targetUrl)
|
||
|
PubMsg("fetch", resMsg)
|
||
|
|
||
|
// Now we read the body and send another message0
|
||
|
|
||
|
defer resp.Body.Close()
|
||
|
body, err := ioutil.ReadAll(resp.Body)
|
||
|
if resp == nil {
|
||
|
resMsg.Error = "resp is nil "
|
||
|
PubMsg("fetch", resMsg)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
resMsg.FetchResBody = body
|
||
|
PubMsg("fetch", resMsg)
|
||
|
|
||
|
// TODO streaming.
|
||
|
})
|
||
|
return nil
|
||
|
}
|