HttpWebRequest收到错误406,Fiddler似乎混淆了事情

时间:2016-08-23 09:01:14

标签: asp.net curl httpwebrequest fiddler

我正在使用以下代码....

Dim myHttpWebRequest As HttpWebRequest = CType(WebRequest.Create(PostingUrl), HttpWebRequest)
myHttpWebRequest.Method = "POST"
myHttpWebRequest.Headers.Add("Authorization", "Bearer " & RSettings.access_token)
myHttpWebRequest.Headers.Add("Accept-Version", "2")
myHttpWebRequest.ContentType = "application/json; charset=UTF-8"
myHttpWebRequest.Accept = "application/json"
' myHttpWebRequest.Proxy = Nothing ' ** SEE NOTES ON THIS LINE **

Dim Byt As Byte() = Encoding.UTF8.GetBytes(DataString)
Using stream = myHttpWebRequest.GetRequestStream()
    stream.Write(Byt, 0, Byt.Length)
End Using

Using myHttpWebResponse As HttpWebResponse = CType(myHttpWebRequest.GetResponse(), HttpWebResponse)
    Using srRead As New StreamReader(myHttpWebResponse.GetResponseStream())
        ListingResponse = srRead.ReadToEnd()
    End Using
End Using

其中:

  • PostingUrl是“https://reverb.com/api/listings
  • RSettings.access_token(显然)是此API的访问令牌
  • DataString是将数据发布到Reverb API的JSON字符串

如果我从Visual Studio(localhost)运行我的代码,则返回

  

远程服务器返回错误:(406)Not Acceptable。

试图找出原因,我打开Fiddler希望我可以检查内容类型并找出问题,但响应错误更改为:

  

底层连接已关闭:无法为SSL / TLS安全通道建立信任关系。 ---> System.Security.Authentication.AuthenticationException:根据验证过程,远程证书无效。

(我猜这个错误,我的Auth键也有问题,但我认为这是一个单独的主题。)

在一些谷歌搜索和S / O页面后,我发现了两个建议:

  1. 工具>提琴手选项> HTTPS和取消选中“捕获HTTPS连接”
  2. 添加注释掉的行:myHttpWebRequest.Proxy = Nothing
  3. 如果我进行了任何这些更改,我会回到我的错误406 ,这是我没有运行Fiddler的。

    但是,如果我添加了myHttpWebRequest.Proxy = Nothing行添加,我再也看不到Fiddler中的Tunnel to http://reverb.com:443日志条目了,没有对Reverb.com的请求记录,所以我无法检查任何内容。

    我现在对我正在做的事感到非常困惑,我想其实并没有取得任何进展!

    • 我仍然有错误406,似乎无法像我希望的那样检查Fiddler的标题/内容类型问题(请解释我是否错了!)
    • 即使我更正了406,我认为我有一个身份验证错误。

    顺便说一下......所有这些都是尝试在Rever文档页面上重新创建cURL示例:

    https://dev.reverb.com/docs/create-a-listing

    我也一直在讨论这个问题:

    https://dev.reverb.com/v1.0/discuss/57bb2ca0aa8f760e004588cf

1 个答案:

答案 0 :(得分:0)

唉...好吧,我对Fiddler的困惑仍然存在,但 406 错误是由此引起的:

myHttpWebRequest.Headers.Add("Accept-Version", "2")

应该是

myHttpWebRequest.Headers.Add("Accept-Version", "2.0")

多么简单!!