我把完整代码贴出来吧
public string getPageFromURL(string url, string key)
{
string timestamp = GetTimestamp().ToString();
string value= "simple auth_key=\"" + RawUrlEncode(API_KEY) + "\",auth_timestamp=\"" + RawUrlEncode(timestamp) + "\",auth_signature=\"" + RawUrlEncode(GetUnreadSignature(timestamp)) + "\"";
string content = "";
// Create a new HttpWebRequest object.Make sure that
// a default proxy is set if you are behind a fure wall.
//其中,HttpWebRequest实例不使用HttpWebRequest的构造函数来创建,二是使用WebRequest的Create方法来创建. HttpWebRequest myHttpWebRequest1 = (HttpWebRequest)WebRequest.Create(url); //不维持与服务器的请求状态
myHttpWebRequest1.KeepAlive = false;
myHttpWebRequest1.Headers.Add(key, value); //创建一个HttpWebRequest对象
//Assign the response object of HttpWebRequest to a HttpWebResponse variable.\
HttpWebResponse myHttpWebResponse1;
try
{
//根据微软MSDN上所说:"决不要直接创建HttpWebResponse的实例,要使用HttpWebRequest的GetResponse()方法返回的实例."具体的原因我也不清楚,可能HttpWebResponse类的构造函数中没有实现HttpWebResponse实例的代码吧.
myHttpWebResponse1 = (HttpWebResponse)myHttpWebRequest1.GetResponse();
//设置页面的编码模式
System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
Stream streamResponse = myHttpWebResponse1.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse, utf8); Char[] readBuff = new Char[256];
//这里使用了StreamReader的Read()方法,参数意指从0开始读取256个char到readByff中.
//Read()方法返回值为指定的字符串数组,当达到文件或流的末尾使,方法返回0
int count = streamRead.Read(readBuff, 0, 256);
while (count > 0)
{
String outputData = new String(readBuff, 0, count);
content += outputData;
count = streamRead.Read(readBuff, 0, 256);
}
myHttpWebResponse1.Close();
return (content);
}
catch (WebException ex)
{
content = "在请求URL为:" + url + "的页面时产生错误,错误信息为" + ex.ToString();
return (content);
}
}调用这个方法的时候经常会在myHttpWebResponse1 = (HttpWebResponse)myHttpWebRequest1.GetResponse();这句代码的时候出现异常,出现的很频繁。请问各位怎么解决?
public string getPageFromURL(string url, string key)
{
string timestamp = GetTimestamp().ToString();
string value= "simple auth_key=\"" + RawUrlEncode(API_KEY) + "\",auth_timestamp=\"" + RawUrlEncode(timestamp) + "\",auth_signature=\"" + RawUrlEncode(GetUnreadSignature(timestamp)) + "\"";
string content = "";
// Create a new HttpWebRequest object.Make sure that
// a default proxy is set if you are behind a fure wall.
//其中,HttpWebRequest实例不使用HttpWebRequest的构造函数来创建,二是使用WebRequest的Create方法来创建. HttpWebRequest myHttpWebRequest1 = (HttpWebRequest)WebRequest.Create(url); //不维持与服务器的请求状态
myHttpWebRequest1.KeepAlive = false;
myHttpWebRequest1.Headers.Add(key, value); //创建一个HttpWebRequest对象
//Assign the response object of HttpWebRequest to a HttpWebResponse variable.\
HttpWebResponse myHttpWebResponse1;
try
{
//根据微软MSDN上所说:"决不要直接创建HttpWebResponse的实例,要使用HttpWebRequest的GetResponse()方法返回的实例."具体的原因我也不清楚,可能HttpWebResponse类的构造函数中没有实现HttpWebResponse实例的代码吧.
myHttpWebResponse1 = (HttpWebResponse)myHttpWebRequest1.GetResponse();
//设置页面的编码模式
System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
Stream streamResponse = myHttpWebResponse1.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse, utf8); Char[] readBuff = new Char[256];
//这里使用了StreamReader的Read()方法,参数意指从0开始读取256个char到readByff中.
//Read()方法返回值为指定的字符串数组,当达到文件或流的末尾使,方法返回0
int count = streamRead.Read(readBuff, 0, 256);
while (count > 0)
{
String outputData = new String(readBuff, 0, count);
content += outputData;
count = streamRead.Read(readBuff, 0, 256);
}
myHttpWebResponse1.Close();
return (content);
}
catch (WebException ex)
{
content = "在请求URL为:" + url + "的页面时产生错误,错误信息为" + ex.ToString();
return (content);
}
}调用这个方法的时候经常会在myHttpWebResponse1 = (HttpWebResponse)myHttpWebRequest1.GetResponse();这句代码的时候出现异常,出现的很频繁。请问各位怎么解决?
换成true试试
我自己调用新浪的public ApiAccessToken GetAccessToken(string code, string requestToken, string requestTokenSecrect, string verify)
{
Dictionary<string, string> prame = new Dictionary<string, string>();
prame.Add("client_id", _apiKey);
prame.Add("client_secret", _apiKeySecret);
prame.Add("grant_type", "authorization_code");
prame.Add("code", code);
prame.Add("redirect_uri", "XXXXXXXXXX");
string resultString = HttpRequestCommand.RequestResult(_accessToken, HttpRequestCommand.GetRequestString(prame), "POST");
//ErrorLog.Info("sinaJson:" + resultString);
HttpRequestCommand.JsonString = resultString;
ApiAccessToken result = new ApiAccessToken();
JObject JsonType = JObject.Parse(resultString);
if (!string.IsNullOrEmpty(((string)JsonType["access_token"])))
{
result = InstantiatedApiAccessToken(JsonType);
} return result;
}public static string RequestResult(string requestUrl, string requestPrame = "", string action = "GET" , string service ="DEFAULT")
{ string responseBody = "";
HttpWebRequest request;
if (action.Equals("POST"))
{
ASCIIEncoding code = new ASCIIEncoding();
byte[] data = code.GetBytes(requestPrame);
request = (HttpWebRequest)WebRequest.Create(new Uri(requestUrl));
request.Method = action;
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(data, 0, data.Length);
requestStream.Close();
}
}
else
{
requestUrl += (service == "DEFAULT")? "?" + requestPrame : requestPrame;
request = (HttpWebRequest)WebRequest.Create(new Uri(requestUrl));
}
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader stream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);
responseBody = stream.ReadToEnd();
stream.Close();
response.Close();
}
catch (WebException ex)
{
string error = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
} return responseBody;
}