我正在尝试使用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编码的。
有什么想法吗?
答案 0 :(得分:0)
我最终得到了这个。如果您遇到我发现的这类问题,可能会对您有所帮助:
我最初遇到了问题,因为每次访问代码时我都会创建一个新的nonce。这意味着用于生成签名密钥的nonce与标头中的nonce不同。显然失败了。
然后我遇到了上述问题。在我发送请求主体之后,我正在向我的请求添加OAuth标头。出于某种原因,它似乎在您写入POST的请求流时立即发送请求。
在找到2.我发现如何使用Fiddler跟踪代码中的Web请求时非常有用。基本上你需要做的就是将它添加到你的web.config:
<system.net>
<defaultProxy>
<proxy proxyaddress="http://127.0.0.1:8888" />
</defaultProxy>
</system.net>
当我尝试读取HTTPS请求时,Fiddler提示我安装位,以便它可以解密请求,我做了,然后我可以看到确切的请求。我可以将其与cURL使用
进行比较-x 127.0.0.1:8888
选项。
然而,我的请求超时时遇到了问题。 Fiddler正在代理回应这一事实造成了奇怪的不足。一旦我再次从我的web.config中取出上述内容,一切正常。 Halleluja!