2013-05-17 15 views
6

プッシュ通知を必要とするWP8アプリを開発しています。 これをテストするには、CURLコマンドラインでプッシュ通知POST要求を実行し、実際に接続し、クライアントSSL証明書で認証し、正しいデータを送信していることを確認してください。私たちが受け取っているこの仕事は、デバイスに押し込むという事実を知っています。ルビーのWindows Phone 8用Microsoft Push Notificationサービスに接続

これは、我々はテスト目的のために使用されているCURLコマンドです:私たちのSSL証明書が実際にURLを使用するために必要とされている。もちろん、

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 

が、私は他の誰かがこれを行っているし、何を参照することができます期待していました私たちは間違っています。

ここで問題となるのは、私たちがこれまでに働くことができなかった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 

これが適切にSSLで接続するように思われるが、その後MS IISサーバーは、私たちが「ドン何らかの理由で私たちに403を返します。得る。ここで

は基本的に私は、ネット/ HTTPを使用してみたことと同じことである:HTTPartyバージョンと同様

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 

を、これも403を返します。..

私はその感覚を得るために始めていますnet/httpでは実際には動作しませんが、動作すると主張するコードの例をいくつか見てきましたが、私たちがここでテストしたものと比べて何の違いも見られません。

誰でもこれを解決する方法を知っていますか?出来ますか?代わりにおそらくlibcurlを使うべきでしょうか?それとも、カールするシステムコールをするのですか? (私たちがすぐにこれを動作させることができない場合、私は暫定的な解決策として最後の1つを行う必要があるかもしれません)。

ご迷惑をおかけして申し訳ありません。

おかげで、 ケニー

+0

あなたの最後の進歩?私はNode.jsから同様のコードで試してきており、立ち往生しています。私は証明書のためにDev Centerのエリアにエラーログが表示されたり、問題の原因を診断するのに役立つと思います。 –

+0

遅く返事を申し訳ありませんが、いいえ、それを働かせることができませんでした。私たちは今のところCURLを呼び出すことに頼らざるを得ませんでした.. –

答えて

0

はあなたのコードとカールからの要求を比較するhttp://mitmproxy.orgのようないくつかのツールを使用してみてください。

たとえば、指定したヘッダーに加えてcurlはUser-AgentAcceptヘッダーを送信しますが、何らかの理由でMicrosoftサーバーがこれらをチェックしている可能性があります。

これは役に立ちません - それはssl関連の

関連する問題