无法通过401 Unauthorized Twitter流媒体API Oauth

时间:2013-07-11 16:25:46

标签: api twitter streaming

我正在尝试使用OAuth构建一个c#模块来连接到Twitter流API(现在是唯一的选择)。我已经到了我的模块将使用GET成功访问api url的程度,但我尝试发出POST请求的所有操作都失败了。

我已经通过使用我的Twitter应用程序页面上的OAuth工具选项卡检查了我的签名是否正确,并在我的代码中修复了nonce和timestamp的值。我已经为Windows设置卷曲,并且可以验证它是否与OAuth工具生成的示例卷曲脚本一起使用(顺便说一下,这需要对引号进行一些更正,以使其适用于Windows Cmd中的卷曲。摆脱单引号对于不需要它们的值,在需要引用的任何内容上使用双引号,并在Authorization标题上,使用双引号并使用反斜杠转义标题内的双引号。

我甚至在跟踪模式下运行卷曲的长度,并从我的c#代码中输出我在帖子正文中发送的字节,我可以验证它们是否相同。

我正在尝试使用'track = twitter'作为帖子正文来访问“https://stream.twitter.com/1.1/statuses/filter.json”。标题是:

Accept: */*
User-Agent: curl/7.21.7(amd64-pc-win32) libcurl/7.21.7 OpenSSL/0.9.8rzlib/1.2.5
Content-Type: application/x-www-form-urlencoded
Host: stream.twitter.com
Content-Length: 13
Connection: Keep-Alive
Authorization: OAuth <the oauth stuff>

我无法检查发送的数据包是否在线路上检查请求是否相同,因为它们当然是SSL编码的。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我最终得到了这个。如果您遇到我发现的这类问题,可能会对您有所帮助:

  1. 我最初遇到了问题,因为每次访问代码时我都会创建一个新的nonce。这意味着用于生成签名密钥的nonce与标头中的nonce不同。显然失败了。

  2. 然后我遇到了上述问题。在我发送请求主体之后,我正在向我的请求添加OAuth标头。出于某种原因,它似乎在您写入POST的请求流时立即发送请求。

  3. 在找到2.我发现如何使用Fiddler跟踪代码中的Web请求时非常有用。基本上你需要做的就是将它添加到你的web.config:

    <system.net>
      <defaultProxy>
        <proxy  proxyaddress="http://127.0.0.1:8888" />
      </defaultProxy>
    </system.net>
    

    当我尝试读取HTTPS请求时,Fiddler提示我安装位,以便它可以解密请求,我做了,然后我可以看到确切的请求。我可以将其与c​​URL使用

    进行比较
    -x 127.0.0.1:8888
    

    选项。

    然而,我的请求超时时遇到了问题。 Fiddler正在代理回应这一事实造成了奇怪的不足。一旦我再次从我的web.config中取出上述内容,一切正常。 Halleluja!