HttpWebRequest 是 .net 基礎類別庫中的一個類別,在命名空間 System.Net 下面,WebRequest 與 HttpWebRequest 兩者則有繼承關係,使用者能通過 HTTP 協議和伺服器交互溝通
HttpWebRequest 對 HTTP 協議進行了完整的封裝,對 HTTP 協議中的 Header, Content, Cookie,都做了屬性和方法的支援
程式會使用 HTTP 協定和伺服器交互主要是進行資料的提交
而通常在資料的提交是透過兩個方式來完成 GET 及 POST
本篇將會透過 GET 方式,發送請求,從台灣證卷交易所得到該支股票的歷史資料
因回傳回來是 CSV 檔,所以得到結果後,會將資料做處理
那開始前先新增一個類別 Stock
class Stock
{
public string Date { get; set; }
public int OpenPrice { get; set; }
public int HighPrice { get; set; }
public int LowPrice { get; set; }
public int ClosePrice { get; set; }
}
然後實作主程式部分
HttpWebRequest request = null;
List<Stock> list = new List<Stock>();
// 建立 WebRequest 並指定目標的 url
request = (HttpWebRequest)WebRequest.Create("http://www.twse.com.tw/exchangeReport/STOCK_DAY?response=csv&date=20180301&stockNo=2330");
// 將 HttpWebRequest 的 Method 屬性設置為 GET
request.Method = "GET";
// API回傳的字串
string result = null;
int index = 0;
// 發出Request
using (WebResponse response = request.GetResponse())
{
StreamReader sr = new StreamReader(response.GetResponseStream());
while(!sr.EndOfStream)
{
result = sr.ReadLine();
index++;
// 前兩筆是欄位名稱,我們不需要,只抓第2筆跟之後
if(index > 2)
{
try
{
// 將資料放入 list
Stock stock = new Stock();
// 以" , "做依據,將資料切成物件,放入陣列中
string[] data = result.Split(',');
// 將不需要的字元去掉
stock.Date = data[0];
stock.OpenPrice = int.Parse(data[3].Replace('"', ' '));
stock.HighPrice = int.Parse(data[4].Replace('"', ' '));
stock.LowPrice = int.Parse(data[5].Replace('"', ' '));
stock.ClosePrice = int.Parse(data[6].Replace('"', ' '));
list.Add(stock);
}
catch(Exception ex)
{
}
}
// 暫止執行續1秒,預防被伺服器鎖定而被拒絕使用
Thread.Sleep(100);
}
sr.Close();
}
// 印出 list 裡的所有資料
foreach(var item in list)
{
Console.WriteLine($"日期:{item.Date} 開盤價:{item.OpenPrice} 最高價:{item.HighPrice} 最低價:{item.LowPrice} 收盤價:{item.ClosePrice}");
}
Console.ReadKey();
確認得到的結果
新人發文,文章敘述如有錯誤及觀念不正確,請不吝嗇指教,感謝~