Skip to content

Commit 04b33a3

Browse files
committedJul 12, 2020
Separate transport into individual transports
1 parent fb3d7a7 commit 04b33a3

File tree

4 files changed

+88
-68
lines changed

4 files changed

+88
-68
lines changed
 

‎go.sum

+8
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k
1313
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
1414
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
1515
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
16+
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc=
1617
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
18+
github.com/BurntSushi/xgbutil v0.0.0-20160919175755-f7c97cef3b4e h1:4ZrkT/RzpnROylmoQL57iVUL57wGKTR5O6KpVnbm2tA=
1719
github.com/BurntSushi/xgbutil v0.0.0-20160919175755-f7c97cef3b4e/go.mod h1:uw9h2sd4WWHOPdJ13MQpwK5qYWKYDumDqxWWIknEQ+k=
1820
github.com/MercuryEngineering/CookieMonster v0.0.0-20180304172713-1584578b3403 h1:EtZwYyLbkEcIt+B//6sujwRCnHuTEK3qiSypAX5aJeM=
1921
github.com/MercuryEngineering/CookieMonster v0.0.0-20180304172713-1584578b3403/go.mod h1:mM6WvakkX2m+NgMiPCfFFjwfH4KzENC07zeGEqq9U7s=
@@ -35,6 +37,7 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC
3537
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
3638
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
3739
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
40+
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
3841
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
3942
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
4043
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
@@ -69,6 +72,7 @@ github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfc
6972
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
7073
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
7174
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
75+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
7276
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
7377
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
7478
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
@@ -96,6 +100,7 @@ github.com/gocolly/colly/v2 v2.0.2-0.20200302170631-ef2d2b016e78 h1:BEK0DJ6e4lXg
96100
github.com/gocolly/colly/v2 v2.0.2-0.20200302170631-ef2d2b016e78/go.mod h1:ePrRZlJcLTU2C/f8pJzXfkdBtBDHL5hOaKLcBoiJcq8=
97101
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
98102
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
103+
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
99104
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
100105
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
101106
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
@@ -109,6 +114,7 @@ github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
109114
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
110115
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
111116
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
117+
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
112118
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
113119
github.com/google/go-github/v27 v27.0.4/go.mod h1:/0Gr8pJ55COkmv+S/yPKCczSkUPIM/LnFyubufRNIS0=
114120
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
@@ -212,6 +218,7 @@ github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181
212218
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
213219
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
214220
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
221+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
215222
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
216223
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
217224
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
@@ -262,6 +269,7 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
262269
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
263270
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
264271
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
272+
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
265273
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
266274
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
267275
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=

‎transport/chromedp.go

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package transport
2+
3+
import (
4+
"bytes"
5+
"context"
6+
"io/ioutil"
7+
"net/http"
8+
9+
"github.com/chromedp/chromedp"
10+
log "github.com/sirupsen/logrus"
11+
)
12+
13+
// ChromeDpTransport : structure for chromedp instance
14+
type ChromeDpTransport struct {
15+
upstream http.RoundTripper
16+
Ctx context.Context
17+
Cancel context.CancelFunc
18+
}
19+
20+
// NewChromeDpTransport : initialize a new transport
21+
func NewChromeDpTransport(upstream http.RoundTripper) (*ChromeDpTransport, error) {
22+
23+
ctx, cancel := chromedp.NewContext(
24+
context.Background(),
25+
chromedp.WithLogf(log.Debugf),
26+
)
27+
28+
return &ChromeDpTransport{
29+
upstream: upstream,
30+
Ctx: ctx,
31+
Cancel: cancel,
32+
}, nil
33+
}
34+
35+
// RoundTrip: extends the RoundTrip API for usage as a colly transport
36+
func (t *ChromeDpTransport) RoundTrip(r *http.Request) (*http.Response, error) {
37+
var (
38+
body string
39+
err error
40+
)
41+
42+
if r.Header.Get("User-Agent") == "" {
43+
r.Header.Set("User-Agent", userAgent)
44+
}
45+
46+
if r.Header.Get("Referer") == "" {
47+
r.Header.Set("Referer", r.URL.String())
48+
}
49+
50+
r.Header.Set("Content-Type", "text/html")
51+
52+
log.Debug("Set Headers for page ", r.URL.String())
53+
54+
if err = chromedp.Run(t.Ctx,
55+
chromedp.Navigate(r.URL.String()),
56+
// chromedp.WaitVisible(`#nnj-body`),
57+
chromedp.OuterHTML("html", &body),
58+
); err != nil {
59+
return &http.Response{}, err
60+
}
61+
log.Debug("Successfully retrieved body")
62+
63+
response := &http.Response{
64+
Status: "200 OK",
65+
StatusCode: 200,
66+
Proto: "HTTP/1.1",
67+
ProtoMajor: 1,
68+
ProtoMinor: 1,
69+
Body: ioutil.NopCloser(bytes.NewBufferString(body)),
70+
ContentLength: int64(len(body)),
71+
Request: r,
72+
Header: r.Header,
73+
}
74+
return response, nil
75+
}

‎transport/consts.go

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package transport
2+
3+
const (
4+
userAgent = `Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36`
5+
)

‎transport/transport.go ‎transport/firefox.go

-68
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,22 @@ package transport
22

33
import (
44
"bytes"
5-
"context"
65
"fmt"
76
"io/ioutil"
87
"net/http"
98
"os"
109
"strings"
1110
"time"
1211

13-
"github.com/chromedp/chromedp"
14-
log "github.com/sirupsen/logrus"
1512
"github.com/tebeka/selenium"
1613
"github.com/tebeka/selenium/firefox"
1714
)
1815

19-
const (
20-
userAgent = `Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36`
21-
)
22-
2316
type SeleniumTransport struct {
2417
upstream http.RoundTripper
2518
WebDriver selenium.WebDriver
2619
}
2720

28-
type ChromeDpTransport struct {
29-
upstream http.RoundTripper
30-
Ctx context.Context
31-
Cancel context.CancelFunc
32-
}
33-
3421
func NewClient() (c *http.Client, err error) {
3522
seleniumURL := fmt.Sprintf("%s/wd/hub", os.Getenv("GOPHIE_SELENIUM_URL"))
3623
fmt.Println("selenium url " + seleniumURL)
@@ -62,61 +49,6 @@ func NewSeleniumTransport(upstream http.RoundTripper, seleniumURL string) (*Sele
6249
}, nil
6350
}
6451

65-
func NewChromeDpTransport(upstream http.RoundTripper) (*ChromeDpTransport, error) {
66-
67-
ctx, cancel := chromedp.NewContext(
68-
context.Background(),
69-
chromedp.WithLogf(log.Debugf),
70-
)
71-
72-
return &ChromeDpTransport{
73-
upstream: upstream,
74-
Ctx: ctx,
75-
Cancel: cancel,
76-
}, nil
77-
}
78-
79-
func (t *ChromeDpTransport) RoundTrip(r *http.Request) (*http.Response, error) {
80-
var (
81-
body string
82-
err error
83-
)
84-
85-
if r.Header.Get("User-Agent") == "" {
86-
r.Header.Set("User-Agent", userAgent)
87-
}
88-
89-
if r.Header.Get("Referer") == "" {
90-
r.Header.Set("Referer", r.URL.String())
91-
}
92-
93-
r.Header.Set("Content-Type", "text/html")
94-
95-
log.Debug("Set Headers for page ", r.URL.String())
96-
97-
if err = chromedp.Run(t.Ctx,
98-
chromedp.Navigate(r.URL.String()),
99-
chromedp.WaitVisible(`main`),
100-
chromedp.OuterHTML("html", &body),
101-
); err != nil {
102-
return &http.Response{}, err
103-
}
104-
log.Debug("Successfully retrieved body")
105-
106-
response := &http.Response{
107-
Status: "200 OK",
108-
StatusCode: 200,
109-
Proto: "HTTP/1.1",
110-
ProtoMajor: 1,
111-
ProtoMinor: 1,
112-
Body: ioutil.NopCloser(bytes.NewBufferString(body)),
113-
ContentLength: int64(len(body)),
114-
Request: r,
115-
Header: r.Header,
116-
}
117-
return response, nil
118-
}
119-
12052
func (t *SeleniumTransport) RoundTrip(r *http.Request) (*http.Response, error) {
12153
var (
12254
title string

0 commit comments

Comments
 (0)
Please sign in to comment.