我想对发送我的数据作为application/x-www-form-urlencoded内容类型的API发出POST请求.由于我需要管理请求标头,我正在使用该http.NewRequest(method, urlStr string, body io.Reader)方法来创建请求.对于此POST请求,我将我的数据查询附加到URL并将正文保留为空,如下所示:
package main
import (
"bytes"
"fmt"
"net/http"
"net/url"
"strconv"
)
func main() {
apiUrl := "https://api.com"
resource := "/user/"
data := url.Values{}
data.Set("name", "foo")
data.Add("surname", "bar")
u, _ := url.ParseRequestURI(apiUrl)
u.Path = resource
u.RawQuery = data.Encode()
urlStr := fmt.Sprintf("%v", u) // "https://api.com/user/?name=foo&surname=bar"
client := &http.Client{}
r, _ := http.NewRequest("POST", urlStr, nil)
r.Header.Add("Authorization", "auth_token=\"XXXXXXX\"")
r.Header.Add("Content-Type", "application/x-www-form-urlencoded")
r.Header.Add("Content-Length", strconv.Itoa(len(data.Encode())))
resp, _ := client.Do(r)
fmt.Println(resp.Status)
}
Run Code Online (Sandbox Code Playgroud)
当我回答时,我总是得到一个400 BAD REQUEST.我相信问题依赖于我的请求,API不了解我发布的有效负载.我知道方法Request.ParseForm,但不确定如何在这种情况下使用它.也许我错过了一些更多的Header,也许是否有更好的方法application/json …
我意识到我在GitHub中观看了太多的回购,而我发现要解开其中许多回购的唯一方法就是github.com/my_user_name/以下,进入每个回复并按下Unwatch按钮.
有没有办法更快更轻松地解开它们?
我有这个代码,我只想设置一个环境变量:
package main
import (
"os"
"fmt"
)
func main() {
_ = os.Setenv("FOO", "BAR")
fmt.Println(os.Getenv("FOO"))
}
Run Code Online (Sandbox Code Playgroud)
运行此文件:
>$ go run file.go
BAR
Run Code Online (Sandbox Code Playgroud)
该fmt.Println呼叫打印BAR正常,但后来我预计这个环境变量来然而在我的会话设置以及,:
>$ echo $FOO
>$
Run Code Online (Sandbox Code Playgroud)
什么都没有$FOO,它是空的.这是预期的行为吗?如果是这样,我怎样才能使这个env变量在我的会话中持久保存,并使用这样的go程序设置它?
我正在向API发出请求,我得到了一个[]byte响应(ioutil.ReadAll(resp.Body)).我正在尝试解组这些内容,但似乎没有编码为utf-8格式,因为unmarshal会返回错误.我正在尝试这样做:
package main
import (
"encoding/json"
"fmt"
"some/api"
)
func main() {
content := api.SomeAPI.SomeRequest() // []byte variable
var data interface{}
err := json.Unmarshal(content, &data)
if err != nil {
panic(err.Error())
}
fmt.Println("Data from response", data)
}
Run Code Online (Sandbox Code Playgroud)
我得到一个错误invalid character '\x1f' looking for beginning of value.对于记录,响应包括在标题中Content-Type:[application/json; charset=utf-8].
解组时如何解码content以避免这些无效字符?
编辑
这是hexdump content:play.golang.org/p/oJ5mqERAmj
我今天开始学习Go.
有一件事让我发疯,这是err返回的参数.
我们假设我需要嵌套一些函数.像这样:
return string(json.Marshal(MyData))
Run Code Online (Sandbox Code Playgroud)
或更复杂的例子:
return func1(func2(func3(MyData)))
Run Code Online (Sandbox Code Playgroud)
是否真的有必要写:
tmp1 , _ = func3(MyData)
tmp2 , _ = func2(tmp1)
tmp3 , _ = func1(tmp2)
return tmp3
Run Code Online (Sandbox Code Playgroud)
那很烦人!
有没有办法让代码看起来更干净?
网址http://smart-ip.net/geoip-json包含一个JSON,其中包含有关地理位置的数据.
我想将该JSON文件存储在JavaScript变量中,因此我可以使用此JSON的字段.