小编Fer*_* Á.的帖子

使用`http.NewRequest(...)`创建一个URL编码的POST请求

我想对发送我的数据作为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 …

http go

85
推荐指数
1
解决办法
10万
查看次数

如何在github上轻松查看多个repos?

我意识到我在GitHub中观看了太多的回购,而我发现要解开其中许多回购的唯一方法就是github.com/my_user_name/以下,进入每个回复并按下Unwatch按钮.

有没有办法更快更轻松地解开它们?

github

69
推荐指数
3
解决办法
1万
查看次数

使用"os"软件包设置后,终端会话中未设置环境变量

我有这个代码,我只想设置一个环境变量:

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程序设置它?

go

8
推荐指数
2
解决办法
2936
查看次数

如何解压缩gzip格式的[]字节内容,以便在解组时出错

我正在向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

utf-8 go

5
推荐指数
1
解决办法
1465
查看次数

如何忽略GO中的返回错误

我今天开始学习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)

那很烦人!
有没有办法让代码看起来更干净?

go

2
推荐指数
2
解决办法
2824
查看次数

使用JavaScript从URL获取JSON响应

网址http://smart-ip.net/geoip-json包含一个JSON,其中包含有关地理位置的数据.

我想将该JSON文件存储在JavaScript变量中,因此我可以使用此JSON的字段.

javascript json

-2
推荐指数
1
解决办法
2722
查看次数

标签 统计

go ×4

github ×1

http ×1

javascript ×1

json ×1

utf-8 ×1