【发布时间】:2012-05-11 22:34:25
【问题描述】:
我正在使用 twitter api 开发一个应用程序,其中涉及编写一个方法来检查用户是否存在。这是我的代码:
public static bool checkUserExists(string user)
{
//string URL = "https://twitter.com/" + user.Trim();
//string URL = "http://api.twitter.com/1/users/show.xml?screen_name=" + user.Trim();
//string URL = "http://google.com/#hl=en&sclient=psy-ab&q=" + user.Trim();
string URL = "http://api.twitter.com/1/users/show.json?screen_name=" + user.Trim();
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(URL);
try
{
var webResponse = (HttpWebResponse)webRequest.GetResponse();
return true;
}
//this part onwards does not matter
catch (WebException ex)
{
if (ex.Status == WebExceptionStatus.ProtocolError && ex.Response != null)
{
var resp = (HttpWebResponse)ex.Response;
if (resp.StatusCode == HttpStatusCode.NotFound)
{
return false;
}
else
{
throw new Exception("Unknown level 1 Exception", ex);
}
}
else
{
throw new Exception("Unknown level 2 Exception", ex);
}
}
}
问题是,调用该方法不起作用(它没有得到响应)超过 2 或 3 次,使用任何已评论的 url,包括 google 搜索查询(我认为它可能是由于 twitter API 限制)。调试时显示卡在:
var webResponse = (HttpWebResponse)webRequest.GetResponse();
我是这样称呼它的:
Console.WriteLine(TwitterFollowers.checkUserExists("handle1"));
Console.WriteLine(TwitterFollowers.checkUserExists("handle2"));
Console.WriteLine(TwitterFollowers.checkUserExists("handle3"));
Console.WriteLine(TwitterFollowers.checkUserExists("handle4"));
Console.WriteLine(TwitterFollowers.checkUserExists("handle5"));
Console.WriteLine(TwitterFollowers.checkUserExists("handle6"));
我最多得到 2-3 行输出。有人可以指出什么问题吗?
更新 1:
我每 15 秒发送 1 个请求(在限制范围内),它仍然会导致错误。另一方面,发送请求、关闭应用程序并再次运行它的效果非常好(平均每 5 秒有 1 个请求)。速率限制为每小时 150 次调用 Twitter FAQ。
另外,我确实等了一段时间,在第 2 级得到了这个异常: http://pastie.org/3897499
更新 2: 听起来可能令人惊讶,但如果我运行 fiddler,它会完美运行。不管我是否针对这个过程!
【问题讨论】:
-
DisposeHttpWebResponse有什么变化吗? -
您需要 Dispose 响应。如果你不这样做,它会使连接保持打开状态。如果您与它们的打开连接过多,大多数服务器会阻止您。
标签: c# httpwebrequest httpwebresponse