继续跟紧上文:JSON 常用方法 - Json字符串转对象 新建Httphelper.cs 类 其中代码如下:
using System;
using System.Collections.Specialized;
using System.IO;
using System.Net;
namespace ConsoleApplication_Json
{
public class Httphelper
{
/// <summary>
/// 在线获取接口数据
/// </summary>
/// <param name="url"></param>
/// <param name="headers"></param>
/// <returns>返回获取的数据</returns>
public static string Get(string url, NameValueCollection headers = null)
{
var result = string.Empty;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Proxy = WebRequest.DefaultWebProxy;
request.Credentials = CredentialCache.DefaultCredentials;
request.Proxy.Credentials = CredentialCache.DefaultCredentials;
if (headers != null)
{
request.Headers.Add(headers);
}
using (WebResponse response = request.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
result = reader.ReadToEnd();
}
}
}
catch (Exception ex)
{
return ex.Message;
}
return result;
}
/// <summary>
/// 通过获取的数据源分字节存入本地文件
/// </summary>
/// <param name="url"></param>
/// <param name="headers"></param>
/// <returns>返回保存的文件</returns>
public static string GetAndDownload(string url, WebHeaderCollection headers = null)
{
var result = string.Empty;
string tempPath = @"C:\TempConsole\";
System.IO.Directory.CreateDirectory(tempPath); //创建临时文件目录
string tempFile = tempPath + @"\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt"; //临时文件
if (System.IO.File.Exists(tempFile))
{
return tempFile;//存在不再下载
}
try
{
//创建文件
FileStream fs = new FileStream(tempFile, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Proxy = WebRequest.DefaultWebProxy;
request.Credentials = CredentialCache.DefaultCredentials;
request.Proxy.Credentials = CredentialCache.DefaultCredentials;
if (headers != null)
{
request.Headers.Add(headers);
}
using (WebResponse response = request.GetResponse())
{
//直到request.GetResponse()程序才开始向目标网页发送Post请求
Stream responseStream = response.GetResponseStream();
//创建本地文件写入流
//Stream stream = new FileStream(tempFile, FileMode.Create);
byte[] bArr = new byte[1024];
int size = responseStream.Read(bArr, 0, (int)bArr.Length);
while (size > 0)
{
//stream.Write(bArr, 0, size);
fs.Write(bArr, 0, size);
size = responseStream.Read(bArr, 0, (int)bArr.Length);
}
fs.Dispose();
fs.Close();
responseStream.Dispose();
responseStream.Close();
return tempFile;
}
}
catch (Exception ex)
{
//删除本地文件
System.IO.File.Delete(tempFile);
return ex.Message;
}
}
}
}
说明,Get(string url, NameValueCollection headers = null) 方法用来获取接口的Json返回值,直接以字符串输出,但是由于开发过程中遇到大数据导致溢出,因此选择下面的方法。 使用方法 GetAndDownload(string url, WebHeaderCollection headers = null) 来将接口上的大数据直接下载到本地上,之后通过文件操作,转成StreamWriter 再进行按字节流获取,并加以转换,才能正常访问,因此这个方法在开发过程中比较适用 。 在Progream.cs 中新建测试方法: 代码如下:
public void testGetOrDownload()
{
var url = "https://api.douban.com/v2/book/isbn/9787115212948";
var responseJson = Httphelper.Get(url, null);
var path = Httphelper.GetAndDownload(url);
}
这个方法通过适用豆瓣的接口获取数据,再将数据进行获取及下载到本地,还是挺不错的。 下个文章记一下文件操作。