Ken*_*rin 6 ruby ssl notifications push windows-phone-8
我们正在开发一个需要推送通知的WP8应用程序.为了测试它,我们使用CURL命令行运行推送通知POST请求,确保它实际连接,使用客户端SSL证书进行身份验证并发送正确的数据.我们知道这项工作正如我们所接受的那样推动设备.
这是我们用于测试目的的CURL命令:
curl --cert client_cert.pem -v -H "Content-Type:text/xml" -H "X-WindowsPhone-Target:Toast" -H "X-NotificationClass:2" -X POST -d "<?xml version='1.0' encoding='utf-8'?><wp:Notification xmlns:wp='WPNotification'><wp:Toast><wp:Text1>My title</wp:Text1><wp:Text2>My subtitle</wp:Text2></wp:Toast></wp:Notification>" https://db3.notify.live.net/unthrottledthirdparty/01.00/AAF9MBULkDV0Tpyj24I3bzE3AgAAAAADCQAAAAQUZm52OkE1OUZCRDkzM0MyREY1RkE
Run Code Online (Sandbox Code Playgroud)
当然我们需要我们的SSL证书来实际使用URL,但我希望其他人这样做,并且可以看到我们做错了什么.
现在,我们的问题是我们需要使用Ruby来完成这项工作,这是迄今为止我们无法开展的工作.
我们尝试过使用HTTParty没有运气,也没有任何运气直接使用net/http.
这是我用来测试的一个非常简单的HTTParty测试脚本:
require "httparty"
payload = "<?xml version='1.0' encoding='utf-8'?><wp:Notification xmlns:wp='WPNotification'><wp:Toast><wp:Text1>My title</wp:Text1><wp:Text2>My subtitle</wp:Text2></wp:Toast></wp:Notification>"
uri = "https://db3.notify.live.net/unthrottledthirdparty/01.00/AAF9MBULkDV0Tpyj24I3bzE3AgAAAAADCQAAAAQUZm52OkE1OUZCRDkzM0MyREY1RkE"
opts = {
body: payload,
headers: {
"Content-Type" => "text/xml",
"X-WindowsPhone-Target" => "Toast",
"X-NotificationClass" => "2"
},
debug_output: $stderr,
pem: File.read("/Users/kenny/Desktop/client_cert.pem"),
ca_file: File.read('/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt')
}
resp = HTTParty.post uri, opts
puts resp.code
Run Code Online (Sandbox Code Playgroud)
这似乎与SSL正确连接,但随后MS IIS服务器返回403给我们由于某种原因我们没有得到.
这与我尝试使用net/http基本相同:
require "net/http"
url = URI.parse "https://db3.notify.live.net/unthrottledthirdparty/01.00/AAF9MBULkDV0Tpyj24I3bzE3AgAAAAADCQAAAAQUZm52OkE1OUZCRDkzM0MyREY1RkE"
payload = "<?xml version='1.0' encoding='utf-8'?><wp:Notification xmlns:wp='WPNotification'><wp:Toast><wp:Text1>My title</wp:Text1><wp:Text2>My subtitle</wp:Text2></wp:Toast></wp:Notification>"
pem_path = "./client_cert.pem"
cert = File.read pem_path
http = Net::HTTP.new url.host, url.port
http.use_ssl = true
http.cert = OpenSSL::X509::Certificate.new cert
http.key = OpenSSL::PKey::RSA.new cert
http.ca_path = '/etc/ssl/certs' if File.exists?('/etc/ssl/certs') # Ubuntu
http.ca_file = '/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt' if File.exists?('/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt') # Mac OS X
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
r = Net::HTTP::Post.new url.path
r.body = payload
r.content_type = "text/xml"
r["X-WindowsPhone-Target"] = "toast"
r["X-NotificationClass"] = "2"
http.start do
resp = http.request r
puts resp.code, resp.body
end
Run Code Online (Sandbox Code Playgroud)
与HTTParty版本一样,这也返回403 ..
我开始觉得这实际上不适用于net/http,但我也看到了一些声称可以工作的代码示例,但是与我们测试的相比,我看不出任何差异这里.
有谁知道如何解决这一问题?可能吗?我应该使用libcurl吗?甚至做一个系统调用卷曲?(如果我们不能尽快开始工作,我可能不得不做最后一个作为临时解决方案).
任何输入都非常感谢!
谢谢,肯尼
尝试使用http://mitmproxy.org等工具来比较来自代码和curl 的请求。
例如,除了指定的标头之外,curl 还会发送User-Agent和Accept-标头,微软服务器可能会出于某种原因检查这些标头。
如果这没有帮助 - 那么它与 ssl 相关
| 归档时间: |
|
| 查看次数: |
1230 次 |
| 最近记录: |