Go言語初心者です。普段フロント側です。
Go言語を用いて、クライアント側としてAPIを叩きたいのですが、勝手がわからず困っています。
試しにWordPressの投稿(post)APIを叩くとします。
go
1// bodyの構造体 2type Items struct { 3 Title string `json:"title"` 4 Content string `json:"content"` 5 Status string `json:"status"` 6 Categories [1]int `json:"categories"` 7}
go
1// bodyの構造体 2API_URL := "https://example.com/wp-json/wp/v2/posts" 3 4// API Body の要素 5title := "title" 6content := "<div>content</div>" 7status := "publish" 8categories := [1]int{1} 9 10// API Body の生成 11items := Items{Title: title, Content: content, Status: status, Categories: categories} 12json, err := json.Marshal(&items) 13if err != nil { 14 fmt.Print("json parce error") 15} 16body := []byte(json)
このようなjsonデータをpostしたいのですが、それができません。
以下は試しにpostを実装しようと書いたコードです。(うごきません)
go
1// Post 2req, err := http.NewRequest( 3 "POST", 4 API_URL, 5 bytes.NewBuffer(data), 6) 7if err != nil { 8 fmt.Println("url scarapping failed") 9} 10 11// Content-Type 設定 12req.Header.Set("Content-Type", "application/json") 13req.SetBasicAuth(USER, PASS) 14 15client := &http.Client{} 16resp, err := client.Do(req) 17if err != nil { 18 fmt.Println("url scarapping failed") 19} 20fmt.Println(resp) 21defer resp.Body.Close()
方法はいくつかあると思いますが、理解しやすいものがあれば、ご教授願いしたいです。
よろしくお願いします。
簡単なpostのサンプルコードも頂けますとありがたいです。
----追記----
確認してみたところ、認証周りのエラーが起きていましたので、修正しました。
しかし上記のfmt.Println(resp)
の箇所で
&{200 OK 200 HTTP/2.0 2 0 map[Expires:[Wed, 11 Jan 1984 05:00:00 GMT] Date:[Wed, 02 Jan 2019 15:54:40 GMT] Link:[<https://kashi-time.net/wp-json/>; rel="https:// api.w.org/"] X-Robots-Tag:[noindex] Access-Control-Allow-Headers:[Authorization, Content-Type] Vary:[Accept-Encoding] Server:[nginx] Content-Type:[application/js on; charset=UTF-8] Allow:[GET, POST, PUT, PATCH, DELETE] Access-Control-Expose-Headers:[X-WP-Total, X-WP-TotalPages] Cache-Control:[no-cache, must-revalidate, ma x-age=0] X-Powered-By:[PHP/7.2.13] X-Content-Type-Options:[nosniff]] 0xc000126210 -1 [] false true map[] 0xc000116000 0xc00048e000}
200番ステータスが返ってきているのにも関わらず、WordPressの方で投稿されていません。
(POST自体の挙動はcurlコマンドで確認済みです。)
質問の内容が少しずれてしまいますが、この現象の理由わかりますでしょうか?
よろしくお願いします。