C#.net WebRequest谷歌财务
问题描述:
我正在使用谷歌财务转换为另一种货币。 我正在使用的代码如下所示,工作正常。但是,今天,我正面临IndexOutofrange异常,并且在下面搜索到的索引中获得-1的结果(这意味着我的结果不包含转换后的值,在记录日志后它是100%真实的)C#.net WebRequest谷歌财务
然后我去了到相同的Web请求调用,给它相同的参数,然后检查来自Web浏览器的源代码,并且我得到了VALUE。
你认为可能是什么问题?从Web浏览器,我得到整个结果,并从我的应用程序结果是缺少转换值字段。
private static string CurrencyConvert(decimal amount, string fromCurrency, string toCurrency)
{
try
{
//Grab your values and build your Web Request to the API
string apiURL = String.Format("https://www.google.com/finance/converter?a={0}&from={1}&to={2}&meta={3}", amount, fromCurrency, toCurrency, Guid.NewGuid().ToString());
//Make your Web Request and grab the results
var request = WebRequest.Create(apiURL);
//Get the Response
StreamReader streamReader = new StreamReader(request.GetResponse().GetResponseStream(), System.Text.Encoding.ASCII);
//Grab your converted value (ie 2.45 USD)
String temp = streamReader.ReadToEnd().ToString();
int pFrom = temp.IndexOf("<span class=bld>") + ("<span class=bld>").Length;
int pTo = temp.LastIndexOf("</span>");
System.Windows.MessageBox.Show(pFrom.ToString() + " " + pTo.ToString());
String result = temp.Substring(pFrom, pTo - pFrom);
// string result = Regex.Matches(streamReader.ReadToEnd(), "<span class=\"?bld\"?>([^<]+)</span>")[0].Groups[1].Value;
//Get the Result
return result;
}
catch(Exception ex)
{
return "";
}
}
答
URL的问题使用此:https://finance.google.com/finance/converter?a= {0} &从= {1} &到= {2} &元= {3}
元参数不必要 https://finance.google.com/finance/converter?a= {0} &从= {1} &到= {2}工作得很好
那么明显的第一件事就是将'temp'保存到一个文件中,这样你就可以看到你正在得到什么... –
@JonSkeet显然,我已经这样做了:D正如我所说即时获得相同的结果没有标签 –
那么它不是很清楚你是什么这意味着。如果你这样说:“当我用浏览器获取它时,我得到这个HTML,当我用'WebRequest'获取它时,我得到这个HTML”显示两者。您查找字符串中不包含的内容的代码实际上并不重要 - 事实上,您没有获得您期望的HTML。 –