2017-12-20 29 views
0

Go lang API에 POST 요청을하고 있습니다. JSON을 문자열 형식 즉 원시 텍스트로 전달할 때 작동하지만 JSON을 전송하면 403 오류가 발생합니다. 이 문제의 원인을 설명해 주시겠습니까? String 대신 JSON을 본문에 적용하는 방법을 알려주십시오. 은 여기 내 이동 랭 코드GoSong의 게시물 본문과 함께 Json을 그대로 받아들입니다.

package main 

import (
    "devmgmtv2/auth" 
    "github.com/gorilla/handlers" 
    "github.com/gorilla/mux" 
    "log" 
    "net/http" 
) 

func main() { 
    router := mux.NewRouter() 
    auth.AuthInit(router) 
    ssid.SsidInit(router) 
    headersOk := handlers.AllowedHeaders([]string{"X-Requested-With"}) 
    originsOk := handlers.AllowedOrigins([]string{"*"}) 
    methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"}) 
    router.HandleFunc("/auth/login", Login).Methods("POST", "OPTIONS") 
    log.Fatal(http.ListenAndServe(":8000", handlers.CORS(headersOk, originsOk, methodsOk)(router))) 
    //log.Fatal(http.ListenAndServe(":8000",router)) 
} 

func Login(w http.ResponseWriter, r *http.Request) { 
    //Create User Struct 
    var user User 
    fmt.Println("REquest Coming") 
    json.NewDecoder(r.Body).Decode(&user) 
    fmt.Println(user) 
    userPassword := getUserPassword(user.User) 
    // call get value for that user 
    fmt.Println(userPassword) 
    // check for equality if true, return the structure 
    // if false return error 
    if user.Password == userPassword { 
     w.Header().Set("Content-Type", "text/plain") 
     w.Write([]byte("success")) 
    } else { 
     http.Error(w, "Forbidden", http.StatusForbidden) 
    } 
} 

Main.go.입니다

+2

"JSON을 String 형식, 즉 원시 텍스트로 전달할 때 작동하지만 JSON을 전송할 때 작동하는 것은 무엇을 의미합니까? JSON은 텍스트 형식이며 항상 "문자열"또는 "텍스트"로 전송됩니다. 정확히 무엇을 했니? – Volker

+0

JSON.stringify (데이터)를 수행 한 후 데이터를 전송할 때 작동하지만 데이터를 그대로 전송할 때. 그것은 작동하지 않았다. 하지만 NodeJS 서버와 함께 사용했습니다. –

+0

클라이언트 측 코드가 JSON을 생성하지 않는 것 같아서 Go에 아무 문제가 없습니다. {: 사용자, "암호"암호 "사용자"} 당신이 원하는 경우 – Flimzy

답변

3

모든 http 서버에 JSON을 보낼 때 항상 JSON.stringify()을 사용해야합니다.

이렇게하지 않으면 ... 이런 종류의 작업을 수행하는 클라이언트 라이브러리가 있지만 JSON은 항상 문자열로 보내집니다.


Node.js를 그것이 문자열 표현을 받아 보통 몸 파서 같은 문자열에서 JSON을 추출하기 위해 들어오는 요청에 실행 ... 그것을 같은 방식으로 처리합니다. 뒷쪽에서 일어날 수도 있지만 여전히 발생합니다.

+0

이렇게하면 모든 것이 명확 해집니다. 감사 :) –