免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6646 | 回复: 5
打印 上一主题 下一主题

急,如何通过 C 语言获取 http response 中的 JSON ? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-12 11:03 |只看该作者 |倒序浏览
大家好,我是 JSON 的新手,目前情况是这样的.

目前通过 socket 我能够获取到服务器给我的 HTTP 200 回应.

好像从这些 char (string) 中获取不到 json,我应该怎么做,才能转换出我所想要的 JSON 数据?

谢谢大家. 请给与指点.

"Get response: _____HTTP/1.1 200 OK
Server: nginx/1.2.9
Date: Tue, 12 Nov 2013 02:43:17 GMT
Content-Type: application/json
Content-Length: 695
Connection: close
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Set-Cookie: PHPSESSID=6ck0seh2pm1bri6a3une13d0; expires=Tue, 12-Nov-2013 04:43:16 GMT; path=/; domain=.testjason.com
Set-Cookie: PHPSESSID=7jcnpib7jqtn3hvik5lr07; expires=Tue, 12-Nov-2013 04:43:16 GMT; path=/; domain=.testjason.com
Vary: Accept-Encoding,User-Agent
X-Powered-By: PHP/5.4.17
Front-End-Https: on
Set-Cookie: incap_ses_120_88065=Ml3qRB0y9A1+OC6t0VOqAcSVgVIAAAxv9Ro078RVpr6+9lTtv5/w==; path=/; Domain=.testjason.com
Set-Cookie: visid_incap_88065=lLvLqEcJSgm5afxKrEVvF8SVgVIAAAAAQUIAAAAAAC9MGYZUu7nrI+iyDpz7Iq; expires=Wed, 11 Nov 2015 13:12:45 GMT; path=/; Domain=.testjason.com
X-Iinfo: 6-7457662-74577747 NNN CT(170 170 0) RT(13842195263 405) q(0 0 4 -1) r(4 6) U6
X-CDN: Incapsula

____

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
2 [报告]
发表于 2013-11-12 11:09 |只看该作者
能把代码发出来大家一起看下吗?

论坛徽章:
0
3 [报告]
发表于 2013-11-12 11:14 |只看该作者
代码应该说很简单了.

180     int socket = 0;
181     SSL* sslHandle = NULL;
182     SSL_CTX* sslContext = NULL;
183     if (SslConnect("testjson.com", 443, socket, sslHandle, sslContext)) {
184         SSL_write(sslHandle, postContent.c_str(), postContent.size());
185         string response = ReadAllFromSSL(sslHandle);
186         cout << "Get response: _____" << response << "____" << endl;
187     }
188
189     // Cleanups no matter connect succeed or not.
190     if (socket != 0) {
191         close(socket);
192     }
193     if (sslHandle) {
194         SSL_shutdown(sslHandle);
195         SSL_free(sslHandle);
196     }
197     if (sslContext) {
198         SSL_CTX_free(sslContext);
199     }
200     return 0;
201 }

论坛徽章:
0
4 [报告]
发表于 2013-11-12 11:15 |只看该作者
现在 http reponse 的所有数据都存放在一个 char *buffer 里面. 我就是不知道该如何从这个  buffer 里面提取到 JSON 数据.

毕竟 http protocol 也有格式吧?

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
5 [报告]
发表于 2013-11-12 11:40 |只看该作者
有个问题,你的代码是取的testjson.com,返回的数据更像是个普通的url request的返回头,你确定这个url会把JSON格式的数据放在head里面返回给你吗?
至少,我找到的信息是:json的数据获取方式有三种:
Use only HTTP Headers
Use HTTP Headers + json body
Always use json and add at the root of the response a boolean responseValid and a error object

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
6 [报告]
发表于 2013-11-12 13:28 |只看该作者
本帖最后由 icymirror 于 2013-11-12 21:28 编辑

找了个实际的数据回来:
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: eo,de-de;q=0.8,de;q=0.6,en-us;q=0.4,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/json; charset=utf-8
Referer: http://localhost/form.html
Content-Length: 88
Cookie: {{..to much data..}}
Pragma: no-cache
Cache-Control: no-cache
{"type":"my_type","comment":"commented"}
上面的最后一行应当就是个json数据。
同时,在那个Q&A里面,有人提到,如果对于json的调用如果没有指向一个给你提供数据的调用的话,有可能是没有结果的。
所以,可以试着先改下URL.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP