簡體   English   中英

如何使用JSON正確格式化POST API請求?

[英]How to properly format a POST API request with JSON?

我在教自己如何開發Android應用程序,最近我開始使用Volley庫進行聯網。 我已經能夠發送基本請求。 我正在嘗試使用Pocket的API,以查看我的應用程序是否可以提取項目。 他們的文檔頁面提到我必須像這樣發送JSON請求

POST /v3/oauth/request HTTP/1.1
Host: getpocket.com
Content-Type: application/json; charset=UTF-8
X-Accept: application/json
{"consumer_key":"1234-abcd1234abcd1234abcd1234",
"redirect_uri":"pocketapp1234:authorizationFinished"}

因此,我在應用程序中制作了一個JSONObject,將鍵consumer_key添加到我的使用者密鑰的值,然后在鍵redirect_uri添加了它們各自的值。 我使用Volley將這個JSONObject作為請求發送到所需的URL,作為POST請求。 我收到的響應代碼是403,這是由錯誤的使用者密鑰引起的。 我已經仔細檢查了使用者密鑰,所以問題出在我的請求上。 我應該如何發出JSON請求? 我是否需要添加額外的數據,例如Content-Type? 如果是這樣,怎么辦?

如果不是太多,您可以指出我對JSON的初學者友好的知識,因為我對Web開發沒有太多了解嗎? 謝謝。

您在代碼上使用哪種請求方法? 使用StringRequest方法時遇到問題。 使用JsonObjectRequest方法時其工作。

除了我的經驗,這是如何創建請求。

創建標題參數

final Map<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json");
headers.put("X-Accept", "application/json");
headers.put("consumer_key", "your-consumer-key");
headers.put("redirect_uri", "https://kamus.nusagates.com");

從標頭創建JSONObject

JSONObject obj = new JSONObject(headers);

創建JsonObjectRequest

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("https://getpocket.com/v3/oauth/request", obj, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
               //get all response data
                Log.d("respon", String.valueOf(response));
                try {
                    //get code from response
                    Log.d("respon code", response.getString("code"));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                return headers;
            }

            @Override
            protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
                String server = String.valueOf(response.headers);
                Log.d("header", server);
                return super.parseNetworkResponse(response);
            }
        };

將請求添加到隊列

RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
queue.add(jsonObjectRequest);

也許這可以幫助您解決問題。

干杯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM