2013-05-17 3 views
6

푸시 알림이 필요한 WP8 앱을 개발 중입니다. 테스트하려면 CURL 명령 줄과 함께 푸시 알림 POST 요청을 실행하여 실제로 연결하고 클라이언트 SSL 인증서로 인증 한 다음 올바른 데이터를 보내야합니다. 우리가받는이 일은 그 장치에 밀려 들어 간다는 사실을 압니다. Ruby에서 Windows Phone 8 용 Microsoft 푸시 알림 서비스에 연결

는 테스트 목적으로 우리가 사용 된 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를 사용하여 시도했습니다 같은 일이 :

나는 느낌까지 들기 시작 했어 ...이 또한 403 반환의 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 

을 그 이것은 실제로 net/http와는 작동하지 않지만, 작동하도록 주장하는 코드의 몇 가지 예제를 보았습니다. 그러나 여기에서 테스트 한 것과 비교하여 차이점을 볼 수는 없습니다.

누구든지 해결 방법을 알고 있습니까? 가능한가? 아마도 libcurl을 대신 사용해야할까요? 또는 말아서 시스템 호출을 수행합니까? (우리가 이것을 곧 작동시키지 못한다면 중간 해결책으로 마지막 하나를해야 할 수도 있습니다).

모든 의견을 크게 환영합니다!

덕분에, 케니

+0

끝까지 진행 하시겠습니까? 나는 비슷한 코드로 Node.js에서 시도해 왔고 붙어 있었다. 나는 Dev Center에서 인증서에 대한 에러 로그를 보거나 그 문제가 무엇인지 진단하는데 도움이 될만한 정보를 얻을 수 있기를 바란다. –

+0

늦게 답신을 보내 드려 죄송합니다. 아니요. 작동하지 않습니다. 우리는 지금 CURL에게 전화하는 것에 의지해야했습니다. –

답변

0

은 당신의 코드와 컬의 요청을 비교 http://mitmproxy.org 같은 몇 가지 도구를 사용해보십시오.

예를 들어 지정한 머리글 이외의 컬은 User-AgentAccept 헤더를 보내지 만 Microsoft 서버는 몇 가지 이유로이를 검사 할 수 있습니다.

이것이 도움이되지 않는다면 - SSL 관련입니다