質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

787閲覧

Go言語でRestAPIのPOSTリクエストがしたいです。

ibabababa

総合スコア13

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2019/01/02 12:57

編集2019/01/02 16:02

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コマンドで確認済みです。)

質問の内容が少しずれてしまいますが、この現象の理由わかりますでしょうか?
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/02 14:09

動かないとはどういうことですか?エラーが出るならそれを貼ってください。どう動かないのかを記載して下さい。
ibabababa

2019/01/03 09:55

質問内容は自己解決しました。 エンドポイントの問題でした。
退会済みユーザー

退会済みユーザー

2019/01/03 10:03

はい、良かったです。
guest

回答1

0

resp.Body を確認して、レスポンス内容を確認してみたらいかがでしょう?

投稿2019/01/12 06:43

mats0228

総合スコア219

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問