我在Erlang世界非常新,我正在尝试为Twitter Stream API编写一个客户端。我正在使用httpc:请求发出POST请求,并且我经常收到401错误,我显然在如何发送请求时做错了什么...我的看起来像这样:Twitter流API - Erlang客户端
fetch_data() ->
Method = post,
URL = "https://stream.twitter.com/1.1/statuses/filter.json",
Headers = "Authorization: OAuth oauth_consumer_key=\"XXX\", oauth_nonce=\"XXX\", oauth_signature=\"XXX%3D\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"XXX\", oauth_token=\"XXX-XXXXX\", oauth_version=\"1.0\"",
ContentType = "application/json",
Body = "{\"track\":\"keyword\"}",
HTTPOptions = [],
Options = [],
R = httpc:request(Method, {URL, Headers, ContentType, Body}, HTTPOptions, Options),
R.
在这一点上,我相信签名没有问题,因为当试图使用curl访问API时,相同的签名工作得很好。我猜我的提问方式存在一些问题。
我与请求得到响应作出上述证明的方式是:
{ok,{{"HTTP/1.1",401,"Unauthorized"},
[{"cache-control","must-revalidate,no-cache,no-store"},
{"connection","close"},
{"www-authenticate","Basic realm=\"Firehose\""},
{"content-length","1243"},
{"content-type","text/html"}],
"<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n<title>Error 401 Unauthorized</title>\n</head>\n<body>\n<h2>HTTP ERROR: 401</h2>\n<p>Problem accessing '/1.1/statuses/filter.json'. Reason:\n<pre> Unauthorized</pre>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n</body>\n</html>\n"}}
当卷曲尝试我使用这个:
curl --request 'POST' 'https://stream.twitter.com/1.1/statuses/filter.json' --data 'track=keyword' --header 'Authorization: OAuth oauth_consumer_key="XXX", oauth_nonce="XXX", oauth_signature="XXX%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="XXX", oauth_token="XXX-XXXX", oauth_version="1.0"' --verbose
和我得到的事件很好。
任何对此的帮助将不胜感激,与Erlang新和我一直拉我的头发在这一个相当长的一段时间。
我使用OAuth:获得/ 6(https://github.com/tim/erlang-oauth)以'状态/ sample'连接到他们的信息流,你可以使用'的OAuth:对于POST'过滤流。 – akonsu