43 lines
980 B
Go
43 lines
980 B
Go
package client
|
|
|
|
import (
|
|
"github.com/PuerkitoBio/goquery"
|
|
"net/http"
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
// Response type wraps http.Response
|
|
// Contains parsed response data and Geziyor functions.
|
|
type Response struct {
|
|
*http.Response
|
|
|
|
// Response body
|
|
Body []byte
|
|
|
|
// Goquery Document object. If response IsHTML, its non-nil.
|
|
HTMLDoc *goquery.Document
|
|
|
|
Request *Request
|
|
}
|
|
|
|
// JoinURL joins base response URL and provided relative URL.
|
|
func (r *Response) JoinURL(relativeURL string) (*url.URL, error) {
|
|
joinedURL, err := r.Request.URL.Parse(relativeURL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return joinedURL, nil
|
|
}
|
|
|
|
// IsHTML checks if response content is HTML by looking content-type header
|
|
func (r *Response) IsHTML() bool {
|
|
contentType := r.Header.Get("Content-Type")
|
|
for _, htmlContentType := range []string{"text/html", "application/xhtml+xml", "application/vnd.wap.xhtml+xml"} {
|
|
if strings.Contains(contentType, htmlContentType) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|