Я передаю список URL-адресов из текстового файла. Команда, как показано ниже
cat urls.txt | ./mygofile
, останавливается, если видит неправильный URL. Как я могу заставить его продолжаться, не выходя из программы? Я хочу показать простую ошибку и перейти к следующему URL без выхода
http://beap.adss.yahoo.com/
http://id.answers.yahoo.com/search
https://brokenurl
http://id.answers.yahoo.com/KnowledgeSearchService
http://id.answers.yahoo.com/question/nextQuestion
package main
import (
"log"
"bufio"
"bytes"
"fmt"
"net/http"
"os"
"strings"
"crypto/tls"
)
func main() {
passedUrl := bufio.NewScanner(os.Stdin)
var pUrl string
for passedUrl.Scan() {
fmt.Println(passedUrl.Text())
if strings.Contains(passedUrl.Text(), "://"){
pUrl = passedUrl.Text()
} else {
pUrl = "https://" + passedUrl.Text()
}
body := "<?xml version=\"1.0\"?>"
customTransport := &(*http.DefaultTransport.(*http.Transport))
customTransport.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
client := &http.Client{Transport: customTransport}
client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse
}
req, err := http.NewRequest("POST", pUrl, bytes.NewBuffer([]byte(body)))
if err != nil {
log.Println(err)
}
req.Header.Add("Content-Type", "application/xml; charset=utf-8")
resp, err := client.Do(req)
if err != nil {
log.Println(err)
}
defer resp.Body.Close()
var responseHeaders string
for headerName, value := range resp.Header {
responseHeaders += headerName + ": " + value[0] + "\n"
}
if strings.Contains(responseHeaders, "text/xml") {
fmt.Printf("Match Head: ")
fmt.Printf(pUrl)
fmt.Println("")
}
}
}
Ниже приведено сообщение об ошибке