REST отправляет запрос на GO-сервер из bash, но не работает для Python - PullRequest
0 голосов
/ 26 октября 2018

У меня есть go server, который демарширует json, который получает.Он работает, когда я делаю это, используя curl, но не работает в случае python.

Go Unmarshal code:

type Data struct {
    Namespace   string `json:"namespace"`
    ContainerId string `json:"containerId"`
}
func notify(w http.ResponseWriter, r *http.Request) {
  decoder := json.NewDecoder(r.Body)
  var data Data
  err := decoder.Decode(&data)
  if err != nil {
    glog.Errorf("Failed to decode the request json %s \n", err.Error())
    return
  }
  ...
}

Если я делаю команду curl, она работает без жалоб:

curl -i -H "Accept: application/json" -H "Content-Type:application/json" -X POST --data '{"namespace": "default", "containerId": "2f7c58d399f2dc35fa1be2abea19301c8e74973ddd72f55a778babf01db5ac26"}' http://mysvc:8080/notify

, но если я делаю то же самое с Python, он жалуется:

jsonPrep['containerId'] = "2f7c58d399f2dc35fa1be2abea19301c8e74973ddd72f55a778babf01db5ac26"
jsonPrep['namespace'] = "default" 
headers = {'Content-type': 'application/json', 'Accept': 'application/json'}
r = requests.post('http://mysvc:8080/notify', json=json.dumps(jsonPrep), headers=headers)

go server жалуется:

E1026 15:49:48.974117       1 main.go:59] Failed to decode the request json json: cannot unmarshal string into Go value of type main.Data

Я нея не вижу, что отличается, когда я делаю curl против запроса покоя в python.

Может кто-нибудь помочь мне определить проблему?

1 Ответ

0 голосов
/ 26 октября 2018

Аргумент json для requests.post() предназначен для передачи значения, для которого еще не было вызвано json.dumps().requests вызывает json.dumps() для самого аргумента json, поэтому, поскольку вы передаете json=json.dumps(jsonPrep), jsonPrep в итоге будет дважды JSONified, что не то, что вы хотите.

Любое использованиеdata:

requests.post(..., data=json.dumps(jsonPrep), ...)

или избавьтесь от json.dumps():

requests.post(..., json=jsonPrep, ...)
...