私はTLSでHTTP GETを行う単純なクライアント/サーバをGoに書いていますが、TLSでHTTP POSTを実行できるようにしようとしています。Golang HTTPS/TLS POSTクライアント/サーバ
以下の例では、index.html
には、テキストhello
が含まれており、HTTP GETは正常に動作しています。私は、クライアントにHTTP GETを取得して、サーバにhello world
を書き戻したい。
クライアント
package main
import (
"crypto/tls"
"fmt"
"io/ioutil"
"net/http"
"strings"
)
func main() {
link := "https://10.0.0.1/static/index.html"
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client := &http.Client{Transport: tr}
response, err := client.Get(link)
if err != nil {
fmt.Println(err)
}
defer response.Body.Close()
content, _ := ioutil.ReadAll(response.Body)
s := strings.TrimSpace(string(content))
fmt.Println(s)
// out := s + " world"
// Not working POST...
// resp, err := client.Post(link, "text/plain", &out)
}
サーバー
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/static/", func (w http.ResponseWriter, r *http.Request) {
fmt.Println("Got connection!")
http.ServeFile(w, r, r.URL.Path[1:])
})
log.Fatal(http.ListenAndServeTLS(":443", "server.crt", "server.key", nil))
}
私はまた、現在サーバー側でPOSTを扱うことは何もないが、私はちょうど私が実行したとき、それはとても画面にそれをプリントアウトしたいですクライアントは私がサーバプリントhello world
を見るでしょう。
適切なPOSTを行うためにクライアントコードを修正する方法を教えてください。そして、対応するサーバーコードはPOSTを受け入れるためにどのように見えますか?私はHTTPS/TLS POSTの例を見つけるのに苦労しています。
あなたの証明書のCAをあなたのトランスポートに追加する必要があります(http://stackoverflow.com/a/38825553/2604529) –
@MarcelNovy私は自己署名証明書を使用しています...それdoesn '私の質問とは関係がありません。 – vesche
POSTでの現在の試行がどのように機能しないかを述べた場合は役に立ちます。 – superfell