summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--main.go47
2 files changed, 41 insertions, 7 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bc65166
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/links \ No newline at end of file
diff --git a/main.go b/main.go
index b044a57..20f5f36 100644
--- a/main.go
+++ b/main.go
@@ -2,25 +2,58 @@ package main
import (
"flag"
- "fmt"
+ "io"
"log"
"net/http"
+ "time"
)
+type Link struct {
+ Href string
+ Text string
+}
+
func main() {
- port := flag.Int("port", 8080, "Server port")
+ // Logging configuration.
+ log.SetFlags(log.LstdFlags | log.Lshortfile)
+
+ // CLI flag configuration.
rawURL := flag.String("url", "", "Web address of target HTML")
+ timeoutSecs := flag.Int("timeout", 2, "Number of seconds after which to time out")
if *rawURL == "" {
log.Fatal("Missing -url")
}
- mux := http.NewServeMux()
+ // Configure the request.
+ timeout := time.Duration(*timeoutSecs) * time.Second
+ client := http.Client{
+ Timeout: timeout,
+ }
+
+ req, err := http.NewRequest(http.MethodGet, *rawURL, nil)
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ // Perform the request.
+ resp, err := client.Do(req)
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer resp.Body.Close()
- srv := http.Server{
- Addr: fmt.Sprintf(":%d", *port),
- Handler: mux,
+ links, err := findLinks(resp.Body)
+ if err != nil {
+ log.Fatal(err)
}
- log.Fatal(srv.ListenAndServe())
+ _ = links
+}
+
+// findLinks consumes the given reader, scraping it of anchor
+// tags. Each anchor tag is "unmarshalled" into a [Link]. The
+// resulting slice of Links is returned, along with an error.
+func findLinks(_ io.Reader) ([]Link, error) {
+ return nil, nil
}