最经接触了一个项目,要用C#来做,但是他原有的网站是PHP做的,数据库使用的是MySql,也不能让我们直接去操作他们的数据库,就这样,提供了一套PHP API给我们,以前到是没有接触过,网上查了很多资料,才慢慢稍微有点弄懂了,但是还不是那么的清晰。
他们的PHP API其实就是一些url地址和一些参数,使用那些,会返回一些字符串。网上查资料,知道了会使用到XMLHTTP这种方式来使用,但是很多也是使用js来调用,虽然不难,但是比起在在CS中写C#代码来的话,就没那么方便(个人的想法)。最后找到了在代码中调用com组建,直接在CS文件中编写,确实也实现了,但是产生了乱码,网上有说原因,具体原理还太明白,只知道是编码格式的问题,可是怎么也弄,也不能正确显示,倒是有有方法能实现,但是用VBScrpt写的一个函数。
最后方法了原来.NET中有WebRequest这个类,功能是一样的,且用起来很方便,实验了下,还是乱码,最后把编码格式改成了Big5,正确了,呵呵。最后把代码贴在下面。
- #region 封裝調用API的函數
- /// <summary>
- /// 根據php api返回返回的字符串
- /// </summary>
- /// <param name="url">調用的api url</param>
- /// <returns>返回需要的數據字符串</returns>
- public static string GetDataWithUrl(string url)
- {
- string respstr;
- WebRequest myWebRequest = WebRequest.Create(url);
- WebResponse myWebResponse = myWebRequest.GetResponse();
- Stream stream = myWebResponse.GetResponseStream();
- Encoding encoder = Encoding.GetEncoding(ConfigurationManager.AppSettings["FontEncoding"]);//讀配置文件,編寫編碼格式
- StreamReader sr = new StreamReader(stream, encoder);
- //以字符串形式读取数据流
- respstr = sr.ReadToEnd();
- sr.Close();
- return respstr;
- }
- #endregion
调用的编码格式那里,我使用了配置文件,其实就是"Big5",红色部分就是转换编码格式,需要使用到StreamReader其中一个带编码格式的重载,如果数据是其他格式,做相应的修改就可以了。
就这么几句简单的代码,搞定,比起用MSXML2这种方式好用多了,也不用去操作js,乱码问题也得以简单的解决,研究这个乱码花了我2个下午的时间,当然这里只是用于Get方法,POST的方法略有不同,还有,这方便会具体在研究一下。