Feature: Implement Geziyor.Post which wraps the httpClient(POST)
1. Implement Geziyor.Post by the same style of Geziyor.Head 2. Add two examples in geziyor_test (TestPostJson, TestPostFormUrlEncoded) issue #38
This commit is contained in:
parent
6415a775f4
commit
b1e4683037
12
geziyor.go
12
geziyor.go
@ -9,6 +9,8 @@ import (
|
|||||||
"github.com/geziyor/geziyor/metrics"
|
"github.com/geziyor/geziyor/metrics"
|
||||||
"github.com/geziyor/geziyor/middleware"
|
"github.com/geziyor/geziyor/middleware"
|
||||||
"golang.org/x/time/rate"
|
"golang.org/x/time/rate"
|
||||||
|
|
||||||
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http/cookiejar"
|
"net/http/cookiejar"
|
||||||
"os"
|
"os"
|
||||||
@ -203,6 +205,16 @@ func (g *Geziyor) Head(url string, callback func(g *Geziyor, r *client.Response)
|
|||||||
g.Do(req, callback)
|
g.Do(req, callback)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Post issues a POST to the specified URL
|
||||||
|
func (g *Geziyor) Post(url string, body io.Reader, callback func(g *Geziyor, r *client.Response)) {
|
||||||
|
req, err := client.NewRequest("POST", url, body)
|
||||||
|
if err != nil {
|
||||||
|
internal.Logger.Printf("Request creating error %v\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
g.Do(req, callback)
|
||||||
|
}
|
||||||
|
|
||||||
// Do sends an HTTP request
|
// Do sends an HTTP request
|
||||||
func (g *Geziyor) Do(req *client.Request, callback func(g *Geziyor, r *client.Response)) {
|
func (g *Geziyor) Do(req *client.Request, callback func(g *Geziyor, r *client.Response)) {
|
||||||
if g.shutdown {
|
if g.shutdown {
|
||||||
|
@ -1,8 +1,15 @@
|
|||||||
package geziyor_test
|
package geziyor_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
|
"net/url"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
|
||||||
"github.com/PuerkitoBio/goquery"
|
"github.com/PuerkitoBio/goquery"
|
||||||
"github.com/elazarl/goproxy"
|
"github.com/elazarl/goproxy"
|
||||||
"github.com/fortytw2/leaktest"
|
"github.com/fortytw2/leaktest"
|
||||||
@ -14,9 +21,6 @@ import (
|
|||||||
"github.com/geziyor/geziyor/internal"
|
"github.com/geziyor/geziyor/internal"
|
||||||
"github.com/geziyor/geziyor/metrics"
|
"github.com/geziyor/geziyor/metrics"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"net/http"
|
|
||||||
"net/http/httptest"
|
|
||||||
"testing"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSimple(t *testing.T) {
|
func TestSimple(t *testing.T) {
|
||||||
@ -180,6 +184,52 @@ func TestHEADRequest(t *testing.T) {
|
|||||||
}).Start()
|
}).Start()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type PostBody struct {
|
||||||
|
UserName string `json:"user_name"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPostJson(t *testing.T) {
|
||||||
|
postBody := &PostBody{
|
||||||
|
UserName: "Juan Valdez",
|
||||||
|
Message: "Best coffee in town",
|
||||||
|
}
|
||||||
|
payloadBuf := new(bytes.Buffer)
|
||||||
|
json.NewEncoder(payloadBuf).Encode(postBody)
|
||||||
|
|
||||||
|
geziyor.NewGeziyor(&geziyor.Options{
|
||||||
|
StartRequestsFunc: func(g *geziyor.Geziyor) {
|
||||||
|
g.Post("https://reqbin.com/echo/post/json", payloadBuf, g.Opt.ParseFunc)
|
||||||
|
},
|
||||||
|
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
|
||||||
|
fmt.Println(string(r.Body))
|
||||||
|
g.Exports <- string(r.Body)
|
||||||
|
},
|
||||||
|
Exporters: []export.Exporter{&export.JSON{FileName: "post_json.json"}},
|
||||||
|
}).Start()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPostFormUrlEncoded(t *testing.T) {
|
||||||
|
postForm := url.Values{}
|
||||||
|
postForm.Set("user_name", "Juan Valdez")
|
||||||
|
postForm.Set("message", "Enjoy a good coffee!")
|
||||||
|
|
||||||
|
geziyor.NewGeziyor(&geziyor.Options{
|
||||||
|
StartRequestsFunc: func(g *geziyor.Geziyor) {
|
||||||
|
g.Post("https://reqbin.com/echo/post/form", strings.NewReader(postForm.Encode()), g.Opt.ParseFunc)
|
||||||
|
},
|
||||||
|
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
|
||||||
|
fmt.Println(string(r.Body))
|
||||||
|
g.Exports <- map[string]interface{}{
|
||||||
|
"host": r.Request.Host,
|
||||||
|
"h1": r.HTMLDoc.Find("h1").Text(),
|
||||||
|
"entire_response": string(r.Body),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Exporters: []export.Exporter{&export.JSON{FileName: "post_form.json"}},
|
||||||
|
}).Start()
|
||||||
|
}
|
||||||
|
|
||||||
func TestCookies(t *testing.T) {
|
func TestCookies(t *testing.T) {
|
||||||
geziyor.NewGeziyor(&geziyor.Options{
|
geziyor.NewGeziyor(&geziyor.Options{
|
||||||
StartURLs: []string{"http://quotes.toscrape.com/login"},
|
StartURLs: []string{"http://quotes.toscrape.com/login"},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user