func NewRequest(method string, url string, doc IDocument) *http.Request { var req http.Request req.Method = method req.ProtoMajor = 1 req.ProtoMinor = 1 req.Close = true req.Header = map[string]string{ "Content-Type": "application/json", "X-Riak-ClientId": "riak.go", } if doc.VectorClock() != "" { req.Header["X-Riak-Vclock"] = doc.VectorClock() } req.TransferEncoding = []string{"chunked"} req.URL, _ = http.ParseURL(url) if doc.Json() != "" { cb := &ClosingBuffer{bytes.NewBufferString(doc.Json())} var rc io.ReadCloser rc = cb req.Body = rc } fmt.Println(req.URL) return &req }
func post(url_ string, oauthHeaders map[string]string) (r *http.Response, err os.Error) { var req http.Request req.Method = "POST" req.ProtoMajor = 1 req.ProtoMinor = 1 req.Close = true req.Header = map[string][]string{ "Authorization": {"OAuth "}, } req.TransferEncoding = []string{"chunked"} first := true for k, v := range oauthHeaders { if first { first = false } else { req.Header["Authorization"][0] += ",\n " } req.Header["Authorization"][0] += k + "=\"" + v + "\"" } req.URL, err = url.Parse(url_) if err != nil { return nil, err } return send(&req) }
func post(theUrl string, oauthHeaders map[string]string) (r *http.Response, err os.Error) { var req http.Request var authorization string = "OAuth " req.Method = "POST" req.ProtoMajor = 1 req.ProtoMinor = 1 req.Close = true req.Header = http.Header{} req.TransferEncoding = []string{"chunked"} first := true for k, v := range oauthHeaders { if first { first = false } else { authorization += ",\n " } authorization += k + "=\"" + v + "\"" } req.Header.Add("Authorization", authorization) req.URL, err = url.Parse(theUrl) if err != nil { return nil, err } return send(&req) }
func sendBody(s Sender, url, method, bodyType string, body io.Reader) (r *http.Response, err os.Error) { var req http.Request req.Method = method req.RawURL = url req.Body = nopCloser{body} req.Header = map[string]string{ "Content-Type": bodyType, } req.TransferEncoding = []string{"chunked"} return Send(s, &req) }
// General Request method used by the specialized request methods to create a request func (client *Client) newRequest(method string, id string) (*http.Request, os.Error) { request := new(http.Request) var err os.Error request.ProtoMajor = 1 request.ProtoMinor = 1 request.TransferEncoding = []string{"chunked"} request.Method = method // Generate Resource-URI and parse it url := client.resource.String() + id if request.URL, err = http.ParseURL(url); err != nil { return nil, err } return request, nil }
// post taken from Golang modified to allow Headers to be pased func post(url string, headers map[string]string, body io.Reader) (r *http.Response, err os.Error) { var req http.Request req.Method = "POST" req.ProtoMajor = 1 req.ProtoMinor = 1 req.Close = true req.Body = nopCloser{body} for k, v := range headers { req.Header.Add(k, v) } req.TransferEncoding = []string{"chunked"} req.URL, err = http.ParseURL(url) if err != nil { return nil, err } return send(&req) }
func requestFromEnvironment(env map[string]string) (*http.Request, os.Error) { r := new(http.Request) r.Method = env["REQUEST_METHOD"] if r.Method == "" { return nil, os.NewError("cgi: no REQUEST_METHOD in environment") } r.Close = true r.Trailer = http.Header{} r.Header = http.Header{} r.Host = env["HTTP_HOST"] r.Referer = env["HTTP_REFERER"] r.UserAgent = env["HTTP_USER_AGENT"] // CGI doesn't allow chunked requests, so these should all be accurate: r.Proto = "HTTP/1.0" r.ProtoMajor = 1 r.ProtoMinor = 0 r.TransferEncoding = nil if lenstr := env["CONTENT_LENGTH"]; lenstr != "" { clen, err := strconv.Atoi64(lenstr) if err != nil { return nil, os.NewError("cgi: bad CONTENT_LENGTH in environment: " + lenstr) } r.ContentLength = clen r.Body = ioutil.NopCloser(io.LimitReader(os.Stdin, clen)) } // Copy "HTTP_FOO_BAR" variables to "Foo-Bar" Headers for k, v := range env { if !strings.HasPrefix(k, "HTTP_") || skipHeader[k] { continue } r.Header.Add(strings.Replace(k[5:], "_", "-", -1), v) } // TODO: cookies. parsing them isn't exported, though. if r.Host != "" { // Hostname is provided, so we can reasonably construct a URL, // even if we have to assume 'http' for the scheme. r.RawURL = "http://" + r.Host + env["REQUEST_URI"] url, err := http.ParseURL(r.RawURL) if err != nil { return nil, os.NewError("cgi: failed to parse host and REQUEST_URI into a URL: " + r.RawURL) } r.URL = url } // Fallback logic if we don't have a Host header or the URL // failed to parse if r.URL == nil { r.RawURL = env["REQUEST_URI"] url, err := http.ParseURL(r.RawURL) if err != nil { return nil, os.NewError("cgi: failed to parse REQUEST_URI into a URL: " + r.RawURL) } r.URL = url } return r, nil }