首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CURL HTTP2请求

CURL HTTP2请求
EN

Stack Overflow用户
提问于 2016-02-24 21:18:16
回答 3查看 22K关注 0票数 11

我想知道是否有人成功地使用CURL通过新的APNS (HTTP2)发送了推送通知。

APNs Provider API page上给出了一个请求示例

下面是请求的方式:

标头

代码语言:javascript
复制
\- END_STREAM

\+ END_HEADERS

:method = POST

:scheme = https

:path = /3/device/00fc13adff785122b4ad28809a3420982341241421348097878e577c991de8f0

host = api.development.push.apple.com

apns-id = eabeae54-14a8-11e5-b60b-1697f925ec7b

apns-expiration = 0

apns-priority = 10

content-length = 33

数据

代码语言:javascript
复制
\+ END_STREAM

{ "aps" : { "alert" : "Hello" } }

但是使用下面的命令,我得到了错误"curl:(16) HTTP/2流1没有干净地关闭: error_code = 8":

代码语言:javascript
复制
curl \

--verbose \

--http2 \

--cert <APPLICATION_CERT_FILE> \

--key <APPLICATION_KEY_FILE> \

--header "Content-Type: application/json" \

--header ":method: POST" \

--header ":path: /3/device/<DEVICE ID>" \

--data '{ "aps" : { "alert" : "Hello" } }' \

https://api.development.push.apple.com

有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2016-04-07 06:06:40

我已经成功地通过以下方式从cURL发送了推送通知:

代码语言:javascript
复制
curl -v -d '{"aps":{"alert":"Test Push","sound":"default"}}' \
--cert /path/to/cert/cert.pem:SECURE_PASSWORD \
-H "apns-topic: com.app.identifier" --http2 \
https://api.development.push.apple.com/3/device/DEVICE_ID

这是使用由homebrew安装的curl版本7.48.0

代码语言:javascript
复制
$ curl --version
curl 7.48.0 (x86_64-apple-darwin15.4.0) libcurl/7.48.0 OpenSSL/1.0.2g zlib/1.2.5 nghttp2/1.9.1
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets 

但是,请注意,在生产服务器上使用我们的开发证书时,我得到了与您相同的错误:https://api.push.apple.com/

HTTP curl:(16)

/2流1关闭不干净: error_code = 8

票数 16
EN

Stack Overflow用户

发布于 2016-11-03 02:19:50

基于证书的提供者身份验证

代码语言:javascript
复制
curl -v
     -d '{"aps":{"alert":"hello"}}'
     -H "apns-topic: <your app bundle ID>" 
     --http2 
     --cert cert.pem
     https://api.push.apple.com/3/device/<device token>

基于令牌的提供者身份验证

代码语言:javascript
复制
curl -v 
     -d '{"aps":{"alert":"hello"}}'
     -H "apns-topic: <your app bundle ID>" 
     -H "authorization: bearer xxxx.yyyy.zzzz" 
     --http2
     https://api.push.apple.com/3/device/<device token>

您将需要生成JWT令牌并使用ES256对其进行签名。这超出了这里的范围(通过快速的Google搜索很容易找到许多库)。

票数 11
EN

Stack Overflow用户

发布于 2016-02-24 21:59:11

  1. remove --

":method: POST“(--data将使其使用POST)

  1. remove -header“:路径:/3/-header/”

路径部分是您想要的,位于URL主机名的右侧,因此指定一个URL值,比如https://api.development.push.apple.com/3/device/<DEVICE ID>

  1. 说,得到一个像那样的HTTP/2级别的流错误是非常意想不到的,并且更倾向于指示一个较低级别的问题somewhere...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35603331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档