Echo Nest API:将用于检查速率限制的 curl 命令转换为 c#
Posted
技术标签:
【中文标题】Echo Nest API:将用于检查速率限制的 curl 命令转换为 c#【英文标题】:Echo Nest API: convert curl command for checking rate limit to c# 【发布时间】:2016-05-18 02:09:13 【问题描述】:我正在尝试将此 curl 命令转换为 c#
curl -i 'http://developer.echonest.com/api/v4/artist/profile?api_key=[API KEY]&name=weezer'
这会返回一个响应头,其内容如下:
HTTP/1.1 200 OK
Content-Length: 135
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 62
X-RateLimit-Used: 58
我试过这段代码,但是当我运行它时,它得到一个异常:“HTTP Error 405 Method not allowed”。
string baseurl = "http://developer.echonest.com/api/v4/artist/profile?api_key=[API KEY]&name=weezer";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(baseurl);
request.Method = "POST";
request.Accept = "application/json";
request.UserAgent = "curl/7.37.0";
request.ContentType = "application/x-www-form-urlencoded";
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
string data = "browser=Win7x64-C1|Chrome32|1024x768&url=http://www.google.com";
streamWriter.Write(data);
var response = request.GetResponse();
string text;
using (var sr = new StreamReader(response.GetResponseStream()))
text = sr.ReadToEnd();
Console.WriteLine(text);
任何帮助将不胜感激。
【问题讨论】:
尝试将您的Method
更改为 GET
。
我试过了,但现在它得到了协议违反异常。
你为什么使用StreamWriter
? HTTP GET 通常没有有效负载。尝试删除整个 using
块。
我删除了它。它可以工作,但响应没有响应标头。
删除request.ContentType
,因为您没有发送任何有效负载。设置request.Accept = "*/*";
【参考方案1】:
除了 Daniel 建议的更改之外,我还将删除 UserAgent。之后,它看起来很像我成功使用的 C#。这是一个稍微缩短的版本:
string baseurl = "http://developer.echonest.com/api/v4/artist/profile?api_key=[API KEY]&name=weezer";
var req = (HttpWebRequest) WebRequest.Create(baseurl);
req.Method = WebRequestMethods.Http.Get;
req.Accept = "application/json";
using (var response = (HttpWebResponse) req.GetResponse())
if (response.StatusCode == HttpStatusCode.OK)
var stream = response.GetResponseStream();
if (stream != null)
using (var sr = new StreamReader(stream))
responseString = sr.ReadToEnd();
var remaining = GetRateInfo(response.Headers, "X-RateLimit-Remaining");
var used = GetRateInfo(response.Headers, "X-RateLimit-Used");
var limit = GetRateInfo(response.Headers, "X-RateLimit-Limit");
Trace.WriteLine($"Excedeed EchoNest Limits: remaining remaining - used used - limit limit");
else
// Error handling
//以及头部解析代码:
private static int GetRateInfo(WebHeaderCollection headers, string type)
var s = headers.Get(type);
if (s == null)
return -1;
int info;
return int.TryParse(s, out info) ? info : -1;
【讨论】:
以上是关于Echo Nest API:将用于检查速率限制的 curl 命令转换为 c#的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Twitter API 用于超过 REST 速率限制的大型 Web 应用程序
如何避免使用 tweepy Twitter API 的速率限制?