0

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

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

我什至已经完成了在跟踪模式下运行 curl 并从我的 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 编码的。

有任何想法吗?

4

1 回答 1

0

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

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

  2. 然后我遇到了上述问题。在我发送请求正文之后,我将 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 中取出上述内容,它就全部起作用了。哈利路亚!

于 2013-07-12T11:21:31.273 回答