1

完全卡在 Google CloudPrint 文档和 python 代码中。我正在编写一个“代理”服务连接器来连接打印机和 Google CloudPrint 服务。看来我能够成功地首先匿名注册打印机(从代理),用户可以通过提供的链接声明它。但是打印机没有出现在用户的 GCP 托管打印机列表中。而且,在代理方面,我无法获得授权码,响应​​将其作为错误返回。然而,在用户认领打印机之前,轮询请求确实返回“尚未注册令牌”。并且在令牌已过期或被使用后,它会返回:“未知、已使用或已过期的令牌”。那么为什么它不会返回授权码,为什么不会 t 打印机出现在受管打印机列表中?请求中缺少什么?

这是注册阶段的请求和响应:

post https://www.google.com/cloudprint/register
X-CloudPrint-Proxy: "my proxy"
Content-Type: "multipart/form-data; boundary=-----------RubyMultipartPost"
Content-Length: "25074"
Status: 200
response: Content-Type: "text/plain"
Set-Cookie: "NID=67=Vr4laL1-skwakQVraGiu-l7i_dONBY5Szu7RAsCiHV5hSRmI8XDUbRQf4l1K7ct5ZCJzPjuZB97wJdvEYUXSGUpsrCnhVZRWuyq-CyQ0KSCvDegdUNz0VgDnH1LPwJBI;Domain=.google.com;Path=/;Expires=Sun, 30-Mar-2014 07:42:54 GMT;HttpOnly"
{"success"=>true, "polling_url"=>"https://www.google.com/cloudprint/getauthcode?printerid=a274981a-e4e7-ea3c-3ea1-e77adb84b5b4&oauth_client_id=", "invite_page_url"=>"https://www.google.com/cloudprint/regtokenpage?t=q2c5n&dpi=300&pagesize=215900,279400", "complete_invite_url"=>"http://goo.gl/printer/0jg9", "automated_invite_url"=>"https://www.google.com/cloudprint/confirm?token=q2c5n", "oauth_scope"=>"https://www.googleapis.com/auth/cloudprint", "token_duration"=>"899", "request"=>{"time"=>"0", "params"=>{"default_display_name"=>["HP-LaserJet-1020test"], "proxy"=>["my proxy"], "auth_client_id"=>["AIzaSyDnm....PeW0lu9Y"], "printer"=>["HP-LaserJet-1020test"]}}, "registration_token"=>"q2c5n" ... 

这是授权代码的轮询请求和响应:

post https://www.google.com/cloudprint/getauthcode?printerid=a274981a-e4e7-ea3c-3ea1-e77adb84b5b4&oauth_client_id=AIzaSyD.....Mpe2PByWPeW0lu9Y
X-CloudPrint-Proxy: "my proxy"
Cookie: "NID=67=Vr4laL1-skwakQVraGiu-l7i_dONBY5Szu7RAsCiHV5hSRmI8XDUbRQf4l1K7ct5ZCJzPjuZB97wJdvEYUXSGUpsrCnhVZRWuyq-CyQ0KSCvDegdUNz0VgDnH1LPwJBI"
Status: 200
response: Content-Type: "text/plain"

{"success"=>false, "message"=>"Unable to get the authorization code.", "request"=>{"time"=>"0", "params"=>{"oauth_client_id"=>["AIzaSyDnmcwkVP....WPeW0lu9Y"], "printerid"=>["a274981a-e4e7-ea3c-3ea1-e77adb84b5b4"]}}, "errorCode"=>505}
4

1 回答 1

1

好的,想通了。文档和代码示例中对“API 密钥”的重复引用让我感到困惑。“client_id”参数需要与 Google API 控制台中的“客户端 ID”字段相同,并且是一个类似于以下内容的字符串:“40nnnnnnnnn96.apps.googleusercontent.com”,其中 nnnnn 是各种数字。Google API 控制台位于:API Console。不要将 API 密钥用于浏览器应用程序(这是我做错的)。

一旦您获得了授权码,打印机就会显示在用户管理的打印机列表中。

完整且正确的轮询查询将类似于以下内容(机密信息已被 xxxxxx 和 nnnnnnn 模糊)

发布https://www.google.com/cloudprint/getauthcode?printerid=c9xxxxcc-bxxx2-0xx5-9xxx-9cxxxxxxxxxde&oauth_client_id=40nnnnnnnn96.apps.googleusercontent.com

于 2013-10-01T21:05:54.130 回答