使用curl發布json數據,curl json請求

本文目錄一覽:

windows下使用curl利用post發送json數據時注意事項

在window中linux格式下的單引號要改成雙引號,json格式數據中雙引號要加\轉義

為什麼要使用curl傳輸json

//使用curl庫,以post方式向伺服器發送json數據

//json數據的組合可以參考jsoncpp庫,也可以按json格式自己組合字元串

//注意事項,以下代碼不可以多線程執行,如果多線程執行,需要加鎖進行控制,否則會運行崩潰

[cpp] view plain copy

#include curl/curl.h

#include string

#include exception

int main(int argc, char *argv[])

{

char szJsonData[1024];

memset(szJsonData, 0, sizeof(szJsonData));

std::string strJson = “{“;

strJson += “\”user_name\” : \”test\”,”;

strJson += “\”password\” : \”test123\””;

strJson += “}”;

strcpy(szJsonData, strJson.c_str());

try

{

CURL *pCurl = NULL;

CURLcode res;

// In windows, this will init the winsock stuff

curl_global_init(CURL_GLOBAL_ALL);

// get a curl handle

pCurl = curl_easy_init();

if (NULL != pCurl)

{

// 設置超時時間為1秒

curl_easy_setopt(pCurl, CURLOPT_TIMEOUT, 1);

// First set the URL that is about to receive our POST.

// This URL can just as well be a

// https:// URL if that is what should receive the data.

curl_easy_setopt(pCurl, CURLOPT_URL, “”);

//curl_easy_setopt(pCurl, CURLOPT_URL, “”);

// 設置http發送的內容類型為JSON

curl_slist *plist = curl_slist_append(NULL,

“Content-Type:application/json;charset=UTF-8”);

curl_easy_setopt(pCurl, CURLOPT_HTTPHEADER, plist);

// 設置要POST的JSON數據

curl_easy_setopt(pCurl, CURLOPT_POSTFIELDS, szJsonData);

// Perform the request, res will get the return code

res = curl_easy_perform(pCurl);

// Check for errors

if (res != CURLE_OK)

{

printf(“curl_easy_perform() failed:%s\n”, curl_easy_strerror(res));

}

// always cleanup

curl_easy_cleanup(pCurl);

}

curl_global_cleanup();

}

catch (std::exception ex)

{

printf(“curl exception %s.\n”, ex.what());

}

return 0;

}

如何用curl post 一段包含中文json的文本到伺服器

1. JSON的數據格式

a) 按照最簡單的形式,可以用下面這樣的 JSON 表示名稱/值對:

{ “firstName”: “Brett” }

b) 可以創建包含多個名稱/值對的記錄,比如:

{ “firstName”: “Brett”, “lastName”:”McLaughlin”, “email”: “brett@newInstance.com” }

c) 可以創建值的數組

{ “people”: [

{ “firstName”: “Brett”, “lastName”:”McLaughlin”, “email”: “brett@newInstance.com” },

{ “firstName”: “Jason”, “lastName”:”Hunter”, “email”: “jason@servlets.com” }

]}

d) 當然,可以使用相同的語法表示多個值(每個值包含多個記錄):

{ “programmers”: [

{ “firstName”: “Brett”, “lastName”:”McLaughlin”, “email”: “brett@newInstance.com” },

{ “firstName”: “Jason”, “lastName”:”Hunter”, “email”: “jason@servlets.com” }

],

“authors”: [

{ “firstName”: “Isaac”, “lastName”: “Asimov”, “genre”: “science fiction” },

{ “firstName”: “Tad”, “lastName”: “Williams”, “genre”: “fantasy” }

],

“musicians”: [

{ “firstName”: “Eric”, “lastName”: “Clapton”, “instrument”: “guitar” }

]

}

注意,在不同的主條目(programmers、authors 和 musicians)之間,記錄中實際的名稱/值對可以不一樣。JSON 是完全動態的,允許在 JSON 結構的中間改變表示數據的方式。

2. 在 JavaScript 中使用 JSON

JSON 是 JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON 數據不需要任何特殊的 API 或工具包。

2.1 將 JSON 數據賦值給變數

例如,可以創建一個新的 JavaScript 變數,然後將 JSON 格式的數據字元串直接賦值給它:

var people =

{ “programmers”: [

{ “firstName”: “Brett”, “lastName”:”McLaughlin”, “email”: “brett@newInstance.com” },

{ “firstName”: “Jason”, “lastName”:”Hunter”, “email”: “jason@servlets.com” }

],

“authors”: [

{ “firstName”: “Isaac”, “lastName”: “Asimov”, “genre”: “science fiction” },

{ “firstName”: “Tad”, “lastName”: “Williams”, “genre”: “fantasy” }

],

“musicians”: [

{ “firstName”: “Eric”, “lastName”: “Clapton”, “instrument”: “guitar” }

]

}

2.2 訪問數據

將這個數組放進 JavaScript 變數之後,就可以很輕鬆地訪問它。實際上,只需用點號表示法來表示數組元素。所以,要想訪問 programmers 列表的第一個條目的姓氏,只需在JavaScript 中使用下面這樣的代碼:

people.programmers[0].lastName;

注意,數組索引是從零開始的。

2.3 修改 JSON 數據

正如訪問數據,可以按照同樣的方式修改數據:

people.musicians[1].lastName = “Rachmaninov”;

2.4 轉換回字元串

a) 在 JavaScript 中這種轉換也很簡單:

String newJSONtext = people.toJSONString();

b) 可以將任何 JavaScript 對象轉換為 JSON 文本。並非只能處理原來用 JSON 字元串賦值的變數。為了對名為 myObject 的對象進行轉換,只需執行相同形式的命令:

String myObjectInJSON = myObject.toJSONString();

說明:將轉換回的字元串作為Ajax調用的字元串,完成非同步傳輸。

小結:如果要處理大量 JavaScript 對象,那麼 JSON 幾乎肯定是一個好選擇,這樣就可以輕鬆地將數據轉換為可以在請求中發送給伺服器端程序的格式。

3. 伺服器端的 JSON

3.1 將 JSON 發給伺服器

a) 通過 GET 以名稱/值對發送 JSON

在 JSON 數據中會有空格和各種字元,Web 瀏覽器往往要嘗試對其繼續編譯。要確保這些字元不會在伺服器上(或者在將數據發送給伺服器的過程中)引起混亂,需要在JavaScript的escape()函數中做如下添加:

var url = “organizePeople.php?people=” + escape(people.toJSONString());

request.open(“GET”, url, true);

request.onreadystatechange = updatePage;

request.send(null);

b) 利用 POST 請求發送 JSON 數據

當決定使用 POST 請求將 JSON 數據發送給伺服器時,並不需要對代碼進行大量更改,如下所示:

var url = “organizePeople.php?timeStamp=” + new Date().getTime();

request.open(“POST”, url, true);

request.onreadystatechange = updatePage;

request.setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”);

request.send(people.toJSONString());

注意:賦值時格式必須是var msg=eval(‘(‘ + req.responseText + ‘)’);

3.2 在伺服器上解釋 JSON

a) 處理 JSON 的兩步驟。

針對編寫伺服器端程序所用的語言,找到相應的 JSON 解析器/工具箱/幫助器 API。

使用 JSON 解析器/工具箱/幫助器 API 取得來自客戶機的請求數據並將數據轉變成腳本能理解的東西。

b) 尋找 JSON 解析器

尋找 JSON 解析器或工具箱最好的資源是 JSON 站點。如果使用的是 Java servlet,json.org 上的 org.json 包就是個不錯的選擇。在這種情況下,可以從 JSON Web 站點下載 json.zip 並將其中包含的源文件添加到項目構建目錄。編譯完這些文件後,一切就就緒了。對於所支持的其他語言,同樣可以使用相同的步驟;使用何種語言取決於您對該語言的精通程度,最好使用您所熟悉的語言。

c) 使用 JSON 解析器

一旦獲得了程序可用的資源,剩下的事就是找到合適的方法進行調用。如果在 servlet 中使用的是 org.json 包,則會使用如下代碼:

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

StringBuffer jb = new StringBuffer();

String line = null;

try {

BufferedReader reader = request.getReader();

while ((line = reader.readLine()) != null)

jb.append(line);

} catch (Exception e) { //report an error }

try {

JSONObject jsonObject = new JSONObject(jb.toString());

} catch (ParseException e) {

// crash and burn

throw new IOException(“Error parsing JSON request string”);

}

// Work with the data using methods like…

// int someInt = jsonObject.getInt(“intParamName”);

// String someString = jsonObject.getString(“stringParamName”);

// JSONObject nestedObj = jsonObject.getJSONObject(“nestedObjName”);

// JSONArray arr = jsonObject.getJSONArray(“arrayParamName”);

// etc…

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/257125.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 12:43
下一篇 2024-12-15 12:44

相關推薦

  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python兩張表數據匹配

    本篇文章將詳細闡述如何使用Python將兩張表格中的數據匹配。以下是具體的解決方法。 一、數據匹配的概念 在生活和工作中,我們常常需要對多組數據進行比對和匹配。在數據量較小的情況下…

    編程 2025-04-29
  • Python爬取公交數據

    本文將從以下幾個方面詳細闡述python爬取公交數據的方法: 一、準備工作 1、安裝相關庫 import requests from bs4 import BeautifulSou…

    編程 2025-04-29
  • Python數據標準差標準化

    本文將為大家詳細講述Python中的數據標準差標準化,以及涉及到的相關知識。 一、什麼是數據標準差標準化 數據標準差標準化是數據處理中的一種方法,通過對數據進行標準差標準化可以將不…

    編程 2025-04-29
  • 如何使用Python讀取CSV數據

    在數據分析、數據挖掘和機器學習等領域,CSV文件是一種非常常見的文件格式。Python作為一種廣泛使用的編程語言,也提供了方便易用的CSV讀取庫。本文將介紹如何使用Python讀取…

    編程 2025-04-29
  • Python如何打亂數據集

    本文將從多個方面詳細闡述Python打亂數據集的方法。 一、shuffle函數原理 shuffle函數是Python中的一個內置函數,主要作用是將一個可迭代對象的元素隨機排序。 在…

    編程 2025-04-29
  • Python根據表格數據生成折線圖

    本文將介紹如何使用Python根據表格數據生成折線圖。折線圖是一種常見的數據可視化圖表形式,可以用來展示數據的趨勢和變化。Python是一種流行的編程語言,其強大的數據分析和可視化…

    編程 2025-04-29

發表回復

登錄後才能評論