C#如何拿到從http上返回JSON數據?


 

第一章: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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM