第一章:C#如何拿到從http上返回JSON數據?
第二章:C#如何解析JSON數據?(反序列化對象)
第三章:C#如何生成JSON字符串?(序列化對象)
第四章:C#如何生成JSON字符串提交給接口(服務器)?
在實際開發中,我們經常會使用到API,所謂API一般就是一個地址,我們稱之為接口。然后我們通過用C#對這地址發送請求,請求后,服務器就會給我們返回數據,一般是XML或者JSON,這里我們主要講述的是JSON。
為了演示,我們這里准備了一個接口,這是一個查詢物流的接口。(讀者讀到這篇文章的時候,接口可能有效,也可能失效,因為接口是網上找的,不是筆者自己寫的,但是原理是一樣的。)
接口: http://www.kuaidi100.com/query?type=快遞公司編碼&postid=物流單號
(ps:快遞公司編碼:申通="shentong" EMS="ems" 順豐="shunfeng" 圓通="yuantong" 中通="zhongtong" 韻達="yunda" 天天="tiantian" 匯通="huitongkuaidi" 全峰="quanfengkuaidi" 德邦="debangwuliu" 宅急送="zhaijisong")
一般我們拿到接口后,需要拼接成我們需要的地址。比如,我們現在需要查詢順豐物流的367847964498單的結果。那么,我們就需要拼接這個接口,拼接結果如下:
http://www.kuaidi100.com/query?type=shunfeng&postid=367847964498
我們拼接好后,可以直接在瀏覽器上訪問這個地址,看看是不是可以正常訪問。如果可以正常訪問,說明我們這個接口沒有問題。那么,我們現在先在瀏覽器訪問一下。看到下面返回的結果就說明正確。
接下來就是大家最喜歡的寫代碼環節,為了方便演示,我們這里用winform程序。非常簡單,我們新建一個窗體程序,點擊后,彈出JSON數據即可。界面如下:
建好窗體,放一個按鈕,然后我們來創建一個類HttpUitls。這個是這個文章中最重要的。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; namespace WindowsFormsApplication1 { public class HttpUitls { public static string Get(string Url) { //System.GC.Collect(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); request.Proxy = null; request.KeepAlive = false; request.Method = "GET"; request.ContentType = "application/json; charset=UTF-8"; request.AutomaticDecompression = DecompressionMethods.GZip; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); if (response != null) { response.Close(); } if (request != null) { request.Abort(); } return retString; } public static string Post(string Url, string Data, string Referer) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); request.Method = "POST"; request.Referer = Referer; byte[] bytes = Encoding.UTF8.GetBytes(Data); request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = bytes.Length; Stream myResponseStream = request.GetRequestStream(); myResponseStream.Write(bytes, 0, bytes.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); if (response != null) { response.Close(); } if (request != null) { request.Abort(); } return retString; } } }
這個類有兩個方法,一個是Get,一個是Post,本篇文章我們只需要用到Get就可以了。
然后是點擊按鈕的方法
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //我們的接口 string url = "http://www.kuaidi100.com/query?type=shunfeng&postid=367847964498"; //將接口傳入,這個HttpUitls的類,有興趣可以研究下,也可以直接用就可以,不用管如何實現。 string getJson = HttpUitls.Get(url); MessageBox.Show(getJson); } } }
然后是運行結果
到這一步說明我們已經成功拿到接口給我們返回的JSON數據了。那么我們會在下一篇文章中講解如何使用這JSON數據,也就是解析JSON