|
|
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build !appengine
package main
import ( "errors" "flag" "io" "log" "net/http" "net/url" "os" )
func handleRemoteSearch() { // Command-line queries.
for i := 0; i < flag.NArg(); i++ { res, err := remoteSearch(flag.Arg(i)) if err != nil { log.Fatalf("remoteSearch: %s", err) } io.Copy(os.Stdout, res.Body) } return }
// remoteSearchURL returns the search URL for a given query as needed by
// remoteSearch. If html is set, an html result is requested; otherwise
// the result is in textual form.
// Adjust this function as necessary if modeNames or FormValue parameters
// change.
func remoteSearchURL(query string, html bool) string { s := "/search?m=text&q=" if html { s = "/search?q=" } return s + url.QueryEscape(query) }
func remoteSearch(query string) (res *http.Response, err error) { // list of addresses to try
var addrs []string if *serverAddr != "" { // explicit server address - only try this one
addrs = []string{*serverAddr} } else { addrs = []string{ defaultAddr, "golang.org", } }
// remote search
search := remoteSearchURL(query, *html) for _, addr := range addrs { url := "http://" + addr + search res, err = http.Get(url) if err == nil && res.StatusCode == http.StatusOK { break } }
if err == nil && res.StatusCode != http.StatusOK { err = errors.New(res.Status) }
return }
|