“您的 API 密钥在此域中无效"从 WP7 调用 Disqus 时 [英] "Your API key is not valid on this domain" when calling Disqus from WP7

查看:63
本文介绍了“您的 API 密钥在此域中无效"从 WP7 调用 Disqus 时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用以下网址访问 REST Disqus API:

I'm trying to access the REST Disqus API using the following url:

http://disqus.com/api/3.0/threads/listPosts.json
?api_key=myKey
&forum=myForum
&thread:ident=myIdent

当我在 Chrome 中访问 url 时,它工作正常. 当我尝试在 WebClient 中下载它时,我遇到了困难:

When I go to the url in Chrome, it works fine. When I try to download it in WebClient, I have difficulty:

            WebClient data = new WebClient();
            Uri queryUri = new Uri(DisqusQuery + ident, UriKind.Absolute);
            data.DownloadStringCompleted += new DownloadStringCompletedEventHandler(onDownloadCompleted);
            data.DownloadStringAsync(queryUri);

DownloadStringCompletedEventArgs 包含以下错误:

{"The remote server returned an error: NotFound."}
 at System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
   at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClass2.<EndGetResponse>b__1(Object sendState)
   at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__1(Object sendState)
   at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethoThe thread '<No Name>' (0xfc10086) has exited with code 0 (0x0).

我可能做错了什么?

更新:查看 Fiddler 显示响应如下:

Update: Looking in Fiddler shows that the response is this:

HTTP/1.1 400 BAD REQUEST
Date: Sun, 28 Aug 2011 14:51:39 GMT
Server: Apache/2.2.14 (Ubuntu)
Vary: Cookie,Accept-Encoding
p3p: CP="DSP IDC CUR ADM DELi STP NAV COM UNI INT PHY DEM"
Content-Length: 68
Connection: close
Content-Type: application/json
X-Pad: avoid browser bug

{"code": 11, "response": "Your API key is not valid on this domain"}

以下是请求来自 Chrome Incognito(未登录到 Disqus)时的响应:

Here is the response when the request is from Chrome Incognito (not logged in to disqus):

HTTP/1.1 200 OK
Date: Mon, 29 Aug 2011 17:00:29 GMT
Server: Apache/2.2.14 (Ubuntu)
X-Ratelimit-Remaining: 1000
Content-Encoding: gzip
Vary: Cookie,Accept-Encoding
X-Ratelimit-Limit: 1000
p3p: CP="DSP IDC CUR ADM DELi STP NAV COM UNI INT PHY DEM"
X-Ratelimit-Reset: 1314640800
Content-Length: 3120
Connection: close
Content-Type: application/json

/* expected JSON response */

更新 2:上述错误是使用我的公钥.使用密钥会导致:

Update 2: The above error is using my public key. Using the secret key results in:

HTTP/1.1 403 FORBIDDEN
Date: Sun, 28 Aug 2011 20:40:32 GMT
Server: Apache/2.2.14 (Ubuntu)
Vary: Cookie,Accept-Encoding
p3p: CP="DSP IDC CUR ADM DELi STP NAV COM UNI INT PHY DEM"
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json

2a
{"code": 5, "response": "Invalid API key"}
0

推荐答案

FIX:

向您的 HttpRequest 添加类似于以下行的内容:

Add something similar to the following line to your HttpRequest:

client.Headers[HttpRequestHeader.Referer] = "http://mywebsite.com";

更长的描述:

问题与 Windows Phone 设置 HTTP Referer 标头的方式有关.

The problem has to do with the way Windows Phone is setting the HTTP Referer header.

当从浏览器地址栏运行成功的请求时,Fiddler 向我展示了这个:

When running the successful request from the browser address bar, Fiddler showed me this:

GET /api/3.0/forums/listPosts.json?forum=disqus&api_key=jRml... HTTP/1.1
Accept: */*
Accept-Language: en-US
Accept-Encoding: gzip, deflate, peerdist
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Zune 4.7; InfoPath.3; MS-RTC LM 8)
Connection: Keep-Alive
Host: disqus.com
Cookie: disqus_unique=...
X-P2P-PeerDist: Version=1.0

当我在 Fiddler 中检查 Silverlight 发送的请求时,我看到以下内容:

When I examined the request sent by Silverlight in Fiddler, I saw the following:

GET /api/3.0/forums/listPosts.json?forum=disqus&api_key=jRml... HTTP/1.1
Accept: */*
Referer: file:///Applications/Install/9036AAF3-F213-4CFB-B57E-576A05E1896D/Install/
Accept-Encoding: identity
User-Agent: NativeHost
Host: disqus.com
Connection: Keep-Alive

通过删除 Referer 标头并通过 Fiddler 重新提交,查询按我的预期工作!所以...您需要做的就是手动将 HTTP Referer 标头设置为您控制的内容(而不是让 Silverlight 为您完成),您应该很高兴.

By removing the Referer header and resubmitting via Fiddler, the query worked as I expected! So... all you need to do is manually set the HTTP Referer header to something you control (rather than letting Silverlight do it for you) and you should be good to go.

哦 - 还要确保您使用的是公钥,而不是密钥.

Oh - and also make sure you're using your public key, not the secret key.

/ck

这篇关于“您的 API 密钥在此域中无效"从 WP7 调用 Disqus 时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆