文档中心

基于OpenAPI规范的标准化技术文档枢纽,提供版本化、交互式、机器可读的API全生命周期管理解决方案。

未找到包含 "" 的相关产品

产品目录

百度风云榜实时热点API

服务正常 免费 人工智能 2023-04-18 147 次

查询异步任务执行状态,获取任务处理结果,支持多种异步处理场景。

调用权限
正常
请求频率限制
1次/秒 (1 QPS)
免费额度
参考价格
免费

请求限制:

免费/测试用户请求频率限制 请求频率总限制 每日请求次数总限制
6秒3次 每个免费用户的QPS总限制 1秒1次 每个用户QPS总限制 不限 每个用户每日请求总次数

其他准入要求:

接口地址: https://api.bjjii.com/api/top/

返回格式: application/json

请求方式: HTTPGET

请求示例: https://api.bjjii.com/api/top/?key=你的key

请求HEADER:

名称
Content-Typeapplication/x-www-form-urlencoded;charset:utf-8;

请求参数说明:

名称必填类型示例值说明
keystring35kj5jnlj53453kl5j43nj5接口密钥,在控制台->密钥管理查看

返回参数说明:

名称类型说明
codeint状态码
msgstring状态信息
datastring请求结果数据集
debugstring/array调试数据
exec_timefloat执行耗时
user_ipstring客户端IP

返回示例:

{"code":200,"msg":"请求成功","data":{"component":"hotList","content":[{"appUrl":"https://m.baidu.com/s?word=%E9%A9%AC%E5%85%8B%E9%BE%99%E8%AE%BF%E5%8D%8E%E7%BA%A2%E6%97%97%E4%B8%93%E8%BD%A6%E8%A2%AB%E6%B3%95%E5%9B%BD%E8%AE%B0%E8%80%85%E5%9B%B4%E8%A7%82&sa=fyb_news","desc":"4月5日,在北京首都国际机场专机楼外,马克龙总统访华期间将乘坐的红旗专车,被现场的法国记者“围观”了。法国记者称:庄重得体,很漂亮。","hotChange":"same","hotScore":"4997010","hotTag":"3","hotTagImg":"https://search-operate.cdn.bcebos.com/54a1ed72d00cd07334860b0509489d8b.png","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/e63957754becfb0244b5e6162566c0dd","index":0,"indexUrl":"","query":"马克龙访华红旗专车被法国记者围观","rawUrl":"https://m.baidu.com/s?word=%E9%A9%AC%E5%85%8B%E9%BE%99%E8%AE%BF%E5%8D%8E%E7%BA%A2%E6%97%97%E4%B8%93%E8%BD%A6%E8%A2%AB%E6%B3%95%E5%9B%BD%E8%AE%B0%E8%80%85%E5%9B%B4%E8%A7%82","show":[],"url":"https://m.baidu.com/s?word=%E9%A9%AC%E5%85%8B%E9%BE%99%E8%AE%BF%E5%8D%8E%E7%BA%A2%E6%97%97%E4%B8%93%E8%BD%A6%E8%A2%AB%E6%B3%95%E5%9B%BD%E8%AE%B0%E8%80%85%E5%9B%B4%E8%A7%82&sa=fyb_news","word":"马克龙访华红旗专车被法国记者围观"},{"appUrl":"https://m.baidu.com/s?word=%E5%A7%90%E5%BC%9F%E5%9D%A0%E4%BA%A1%E6%A1%88%3A%E6%9C%89%E5%B8%82%E6%B0%91%E5%9C%A8%E9%AB%98%E9%99%A2%E9%97%A8%E5%8F%A3%E8%B9%B2%E5%88%A4%E5%86%B3&sa=fyb_news","desc":"4月6日上午,重庆姐弟坠亡案二审在重庆市高院二号法庭开庭审理。不少市民特地到赶重庆市高院门口等待终审结果。","hotChange":"same","hotScore":"4897125","hotTag":"3","hotTagImg":"https://search-operate.cdn.bcebos.com/54a1ed72d00cd07334860b0509489d8b.png","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/96309488d3450871ec8935b311cc8c25","index":1,"indexUrl":"","query":"姐弟坠亡案:有市民在高院门口蹲判决","rawUrl":"https://m.baidu.com/s?word=%E5%A7%90%E5%BC%9F%E5%9D%A0%E4%BA%A1%E6%A1%88%3A%E6%9C%89%E5%B8%82%E6%B0%91%E5%9C%A8%E9%AB%98%E9%99%A2%E9%97%A8%E5%8F%A3%E8%B9%B2%E5%88%A4%E5%86%B3","show":[],"url":"https://m.baidu.com/s?word=%E5%A7%90%E5%BC%9F%E5%9D%A0%E4%BA%A1%E6%A1%88%3A%E6%9C%89%E5%B8%82%E6%B0%91%E5%9C%A8%E9%AB%98%E9%99%A2%E9%97%A8%E5%8F%A3%E8%B9%B2%E5%88%A4%E5%86%B3&sa=fyb_news","word":"姐弟坠亡案:有市民在高院门口蹲判决"},{"appUrl":"https://m.baidu.com/s?word=%E4%B8%AD%E5%9B%BD%E6%96%A1%E6%97%8B%EF%BC%81%E6%B2%99%E4%BC%8A%E5%A4%96%E9%95%BF%E5%8C%97%E4%BA%AC%E4%BC%9A%E6%99%A4&sa=fyb_news","desc":"在中国的斡旋下,沙特外交大臣费萨尔和伊朗外交部长阿卜杜拉·希扬6日在北京举行会晤,这是两国外长7年多来的首次正式会晤。","hotChange":"same","hotScore":"4741734","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/6f62a37e925719bb24f42c8f7dc0f851","index":2,"indexUrl":"","query":"中国斡旋!沙伊外长北京会晤","rawUrl":"https://m.baidu.com/s?word=%E4%B8%AD%E5%9B%BD%E6%96%A1%E6%97%8B%EF%BC%81%E6%B2%99%E4%BC%8A%E5%A4%96%E9%95%BF%E5%8C%97%E4%BA%AC%E4%BC%9A%E6%99%A4","show":[],"url":"https://m.baidu.com/s?word=%E4%B8%AD%E5%9B%BD%E6%96%A1%E6%97%8B%EF%BC%81%E6%B2%99%E4%BC%8A%E5%A4%96%E9%95%BF%E5%8C%97%E4%BA%AC%E4%BC%9A%E6%99%A4&sa=fyb_news","word":"中国斡旋!沙伊外长北京会晤"},{"appUrl":"https://m.baidu.com/s?word=%E7%BE%8E%E5%9B%BD%E7%94%B7%E5%AD%90%E6%89%BF%E8%AE%A4%E6%8E%B0%E6%96%AD%E5%B9%B6%E5%81%B7%E8%B5%B0%E5%85%B5%E9%A9%AC%E4%BF%91%E6%89%8B%E6%8C%87&sa=fyb_news","desc":"6年前一度在中美两国间引发极大关注的“在美展出兵马俑拇指被盗案”有了新进展。近日,涉嫌掰断并偷走兵马俑拇指的美国男子迈克尔·罗哈纳现已认罪。","hotChange":"same","hotScore":"4661109","hotTag":"3","hotTagImg":"https://search-operate.cdn.bcebos.com/54a1ed72d00cd07334860b0509489d8b.png","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/78fbea325e727d535ee7cae91fc1b6a5","index":3,"indexUrl":"","query":"美国男子承认掰断并偷走兵马俑手指","rawUrl":"https://m.baidu.com/s?word=%E7%BE%8E%E5%9B%BD%E7%94%B7%E5%AD%90%E6%89%BF%E8%AE%A4%E6%8E%B0%E6%96%AD%E5%B9%B6%E5%81%B7%E8%B5%B0%E5%85%B5%E9%A9%AC%E4%BF%91%E6%89%8B%E6%8C%87","show":[],"url":"https://m.baidu.com/s?word=%E7%BE%8E%E5%9B%BD%E7%94%B7%E5%AD%90%E6%89%BF%E8%AE%A4%E6%8E%B0%E6%96%AD%E5%B9%B6%E5%81%B7%E8%B5%B0%E5%85%B5%E9%A9%AC%E4%BF%91%E6%89%8B%E6%8C%87&sa=fyb_news","word":"美国男子承认掰断并偷走兵马俑手指"},{"appUrl":"https://m.baidu.com/s?word=%E7%BD%91%E5%BA%97%E5%94%AE%E5%8D%96%E2%80%9C%E8%B4%9E%E6%93%8D%E9%94%81%E2%80%9D%E5%8D%B0%E8%8A%B1%E5%A5%B3%E8%A3%A4%E5%BC%95%E4%BA%89%E8%AE%AE&sa=fyb_news","desc":"近日,某品牌女装网店在售款式的设计引发争议。商品图片显示,一款白色长裤的裤腰至裤裆处,有类似于“贞操锁”图片的大面积印花。","hotChange":"same","hotScore":"4589337","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/e80a2b541c33cd10c3312e07b94a94c6","index":4,"indexUrl":"","query":"网店售卖“贞操锁”印花女裤引争议","rawUrl":"https://m.baidu.com/s?word=%E7%BD%91%E5%BA%97%E5%94%AE%E5%8D%96%E2%80%9C%E8%B4%9E%E6%93%8D%E9%94%81%E2%80%9D%E5%8D%B0%E8%8A%B1%E5%A5%B3%E8%A3%A4%E5%BC%95%E4%BA%89%E8%AE%AE","show":[],"url":"https://m.baidu.com/s?word=%E7%BD%91%E5%BA%97%E5%94%AE%E5%8D%96%E2%80%9C%E8%B4%9E%E6%93%8D%E9%94%81%E2%80%9D%E5%8D%B0%E8%8A%B1%E5%A5%B3%E8%A3%A4%E5%BC%95%E4%BA%89%E8%AE%AE&sa=fyb_news","word":"网店售卖“贞操锁”印花女裤引争议"},{"appUrl":"https://m.baidu.com/s?word=%E7%8C%A9%E7%8C%A9%E8%A2%AB%E6%B8%B8%E5%AE%A2%E6%89%94%E7%93%B6%E5%AD%90%E7%A0%B8%E5%A4%B4%E5%90%8E%E6%89%94%E5%9B%9E%E5%8F%8D%E5%87%BB&sa=fyb_news","desc":"近日,吉林疑似一游客在参观时用饮料瓶击中大猩猩头部后被反击。6日,动植物公园回应:目前猩猩身体状况并无大碍,后期会向领导反映,加强管理。","hotChange":"same","hotScore":"4468210","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/d1d56af46630a0506dda662f3f7f92a6","index":5,"indexUrl":"","query":"猩猩被游客扔瓶子砸头后扔回反击","rawUrl":"https://m.baidu.com/s?word=%E7%8C%A9%E7%8C%A9%E8%A2%AB%E6%B8%B8%E5%AE%A2%E6%89%94%E7%93%B6%E5%AD%90%E7%A0%B8%E5%A4%B4%E5%90%8E%E6%89%94%E5%9B%9E%E5%8F%8D%E5%87%BB","show":[],"url":"https://m.baidu.com/s?word=%E7%8C%A9%E7%8C%A9%E8%A2%AB%E6%B8%B8%E5%AE%A2%E6%89%94%E7%93%B6%E5%AD%90%E7%A0%B8%E5%A4%B4%E5%90%8E%E6%89%94%E5%9B%9E%E5%8F%8D%E5%87%BB&sa=fyb_news","word":"猩猩被游客扔瓶子砸头后扔回反击"},{"appUrl":"https://m.baidu.com/s?word=%E4%BA%8C%E8%83%8E%E5%AD%95%E5%A6%87%E4%BB%8E%E7%AE%A1%E7%90%86%E5%B2%97%E8%A2%AB%E8%B0%83%E5%88%B0%E4%BD%93%E5%8A%9B%E5%8A%B3%E5%8A%A8%E5%B2%97&sa=fyb_news","desc":"近日,江苏常州何女士因怀孕被公司从管理岗调整至一线体力劳动岗,向当地妇联求助后,最终经劳动仲裁部门主持调解,公司向何女士一次性赔偿9万元。","hotChange":"same","hotScore":"4392091","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/a5c0abbc3f4b809e3363708a98eb1309","index":6,"indexUrl":"","query":"二胎孕妇从管理岗被调到体力劳动岗","rawUrl":"https://m.baidu.com/s?word=%E4%BA%8C%E8%83%8E%E5%AD%95%E5%A6%87%E4%BB%8E%E7%AE%A1%E7%90%86%E5%B2%97%E8%A2%AB%E8%B0%83%E5%88%B0%E4%BD%93%E5%8A%9B%E5%8A%B3%E5%8A%A8%E5%B2%97","show":[],"url":"https://m.baidu.com/s?word=%E4%BA%8C%E8%83%8E%E5%AD%95%E5%A6%87%E4%BB%8E%E7%AE%A1%E7%90%86%E5%B2%97%E8%A2%AB%E8%B0%83%E5%88%B0%E4%BD%93%E5%8A%9B%E5%8A%B3%E5%8A%A8%E5%B2%97&sa=fyb_news","word":"二胎孕妇从管理岗被调到体力劳动岗"},{"appUrl":"https://m.baidu.com/s?word=%E9%A9%AC%E5%85%8B%E9%BE%99%E7%8E%B0%E5%9C%BA%E2%80%9C%E7%BA%A0%E6%AD%A3%E2%80%9D%E9%BB%84%E6%B8%A4%E6%B3%95%E8%AF%AD%E5%8F%91%E9%9F%B3&sa=fyb_news","desc":"5日,法国总统马克龙与黄渤同台亮相“中法文化之春”艺术节开幕式。黄渤在用法语宣布开幕时把大家逗得哈哈大笑,随后马克龙笑着“纠正”了他的发音。","hotChange":"same","hotScore":"4204058","hotTag":"3","hotTagImg":"https://search-operate.cdn.bcebos.com/54a1ed72d00cd07334860b0509489d8b.png","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/d536a2366c5db7dcd3f0bf384eb87c4b","index":7,"indexUrl":"","query":"马克龙现场“纠正”黄渤法语发音","rawUrl":"https://m.baidu.com/s?word=%E9%A9%AC%E5%85%8B%E9%BE%99%E7%8E%B0%E5%9C%BA%E2%80%9C%E7%BA%A0%E6%AD%A3%E2%80%9D%E9%BB%84%E6%B8%A4%E6%B3%95%E8%AF%AD%E5%8F%91%E9%9F%B3","show":[],"url":"https://m.baidu.com/s?word=%E9%A9%AC%E5%85%8B%E9%BE%99%E7%8E%B0%E5%9C%BA%E2%80%9C%E7%BA%A0%E6%AD%A3%E2%80%9D%E9%BB%84%E6%B8%A4%E6%B3%95%E8%AF%AD%E5%8F%91%E9%9F%B3&sa=fyb_news","word":"马克龙现场“纠正”黄渤法语发音"},{"appUrl":"https://m.baidu.com/s?word=%E6%BC%94%E5%91%98%E5%86%AF%E8%BF%9C%E5%BE%81%E6%9C%89%E6%96%B0%E8%81%8C%E5%8A%A1&sa=fyb_news","desc":"据京艺苑消息,4月6日上午,北京戏剧家协会六届六次主席团会、理事会在北京市文联大楼召开。冯远征当选北京戏剧家协会第六届理事会主席。","hotChange":"same","hotScore":"4187911","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/4b7e09c4bc6ae26af6ff2af221d4ed46","index":8,"indexUrl":"","query":"演员冯远征有新职务","rawUrl":"https://m.baidu.com/s?word=%E6%BC%94%E5%91%98%E5%86%AF%E8%BF%9C%E5%BE%81%E6%9C%89%E6%96%B0%E8%81%8C%E5%8A%A1","show":[],"url":"https://m.baidu.com/s?word=%E6%BC%94%E5%91%98%E5%86%AF%E8%BF%9C%E5%BE%81%E6%9C%89%E6%96%B0%E8%81%8C%E5%8A%A1&sa=fyb_news","word":"演员冯远征有新职务"},{"appUrl":"https://m.baidu.com/s?word=%E5%B1%B1%E4%B8%9C%E4%B8%80%E8%9C%9C%E9%9B%AA%E5%86%B0%E5%9F%8E%E5%BA%97%E5%86%85%E5%8F%91%E7%94%9F%E5%88%91%E6%A1%88&sa=fyb_news","desc":"4月5日,山东威海一家蜜雪冰城店发生刑事案件。一女子被害,遗体由殡仪馆运走,一名受刀伤的男子,事后被送往医院抢救。知情人:疑似感情纠纷所致。","hotChange":"same","hotScore":"4043779","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/125bb092b6c9914b4a9da2fd6bf9e3f3","index":9,"indexUrl":"","query":"山东一蜜雪冰城店内发生刑案","rawUrl":"https://m.baidu.com/s?word=%E5%B1%B1%E4%B8%9C%E4%B8%80%E8%9C%9C%E9%9B%AA%E5%86%B0%E5%9F%8E%E5%BA%97%E5%86%85%E5%8F%91%E7%94%9F%E5%88%91%E6%A1%88","show":[],"url":"https://m.baidu.com/s?word=%E5%B1%B1%E4%B8%9C%E4%B8%80%E8%9C%9C%E9%9B%AA%E5%86%B0%E5%9F%8E%E5%BA%97%E5%86%85%E5%8F%91%E7%94%9F%E5%88%91%E6%A1%88&sa=fyb_news","word":"山东一蜜雪冰城店内发生刑案"},{"appUrl":"https://m.baidu.com/s?word=%E7%BA%AA%E5%A7%94%E9%80%9A%E6%8A%A5%E5%A5%B3%E5%AD%90%E4%B8%BE%E6%8A%A5%E7%88%B6%E4%BA%B2%E5%8F%97%E8%B4%BF1900%E4%B8%87&sa=fyb_news","desc":"4月5日,宝鸡一女子实名举报父亲受贿1900万。6日,当地纪委监委回应:顿小建已于2022年7月接受纪律审查和监察调查,案件已移送司法机关。","hotChange":"same","hotScore":"3998493","hotTag":"3","hotTagImg":"https://search-operate.cdn.bcebos.com/54a1ed72d00cd07334860b0509489d8b.png","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/4dd164e3de05b964af227459fca6ee87","index":10,"indexUrl":"","query":"纪委通报女子举报父亲受贿1900万","rawUrl":"https://m.baidu.com/s?word=%E7%BA%AA%E5%A7%94%E9%80%9A%E6%8A%A5%E5%A5%B3%E5%AD%90%E4%B8%BE%E6%8A%A5%E7%88%B6%E4%BA%B2%E5%8F%97%E8%B4%BF1900%E4%B8%87","show":[],"url":"https://m.baidu.com/s?word=%E7%BA%AA%E5%A7%94%E9%80%9A%E6%8A%A5%E5%A5%B3%E5%AD%90%E4%B8%BE%E6%8A%A5%E7%88%B6%E4%BA%B2%E5%8F%97%E8%B4%BF1900%E4%B8%87&sa=fyb_news","word":"纪委通报女子举报父亲受贿1900万"},{"appUrl":"https://m.baidu.com/s?word=%E9%99%88%E6%85%A7%E7%90%B3%E4%B9%89%E5%8D%968000%E4%BB%B6%E4%BA%8C%E6%89%8B%E8%A1%A3%E7%89%A9%E5%BC%95%E7%96%AF%E6%8A%A2&sa=fyb_news","desc":"5日,陈慧琳现身二手衣物慈善义卖活动现场。据陈慧琳透露,她为本次活动准备了8000多件个人用品。义卖当天下午,大部分东西已经被抢购一空。","hotChange":"same","hotScore":"3866802","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/b9dd95fe1c2d4cde9fff5416548256ae","index":11,"indexUrl":"","query":"陈慧琳义卖8000件二手衣物引疯抢","rawUrl":"https://m.baidu.com/s?word=%E9%99%88%E6%85%A7%E7%90%B3%E4%B9%89%E5%8D%968000%E4%BB%B6%E4%BA%8C%E6%89%8B%E8%A1%A3%E7%89%A9%E5%BC%95%E7%96%AF%E6%8A%A2","show":[],"url":"https://m.baidu.com/s?word=%E9%99%88%E6%85%A7%E7%90%B3%E4%B9%89%E5%8D%968000%E4%BB%B6%E4%BA%8C%E6%89%8B%E8%A1%A3%E7%89%A9%E5%BC%95%E7%96%AF%E6%8A%A2&sa=fyb_news","word":"陈慧琳义卖8000件二手衣物引疯抢"},{"appUrl":"https://m.baidu.com/s?word=120%E7%A7%92%E5%9B%9E%E9%A1%BE%E9%87%8D%E5%BA%86%E5%A7%90%E5%BC%9F%E5%9D%A0%E4%BA%A1%E6%A1%88&sa=fyb_news","desc":"重庆姐弟坠楼案二审将于6日开庭审理。5日生母陈女士前往祭拜孩子。被告张波寄出四封信请求原谅,陈女士称信字迹不一。120秒回顾重庆姐弟坠亡案。","hotChange":"same","hotScore":"3779030","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/922e305aaac595e771e2bf6d85b0a9d9","index":12,"indexUrl":"","query":"120秒回顾重庆姐弟坠亡案","rawUrl":"https://m.baidu.com/s?word=120%E7%A7%92%E5%9B%9E%E9%A1%BE%E9%87%8D%E5%BA%86%E5%A7%90%E5%BC%9F%E5%9D%A0%E4%BA%A1%E6%A1%88","show":[],"url":"https://m.baidu.com/s?word=120%E7%A7%92%E5%9B%9E%E9%A1%BE%E9%87%8D%E5%BA%86%E5%A7%90%E5%BC%9F%E5%9D%A0%E4%BA%A1%E6%A1%88&sa=fyb_news","word":"120秒回顾重庆姐弟坠亡案"},{"appUrl":"https://m.baidu.com/s?word=%E4%B8%A4%E5%B9%B4%E6%97%B6%E9%97%B4%EF%BC%8C%E8%B6%B3%E5%8D%8F60%E4%BD%99%E4%BA%BA%E6%8C%A5%E9%9C%8D5000%E4%B8%87&sa=fyb_news","desc":"","hotChange":"same","hotScore":"3603086","hotTag":"0","img":"https://fyb-1.cdn.bcebos.com/fyb/de6163834f53ca92c1273fff98ac9078.jpeg","index":13,"indexUrl":"","query":"两年时间,足协60余人挥霍5000万","rawUrl":"https://m.baidu.com/s?word=%E4%B8%A4%E5%B9%B4%E6%97%B6%E9%97%B4%EF%BC%8C%E8%B6%B3%E5%8D%8F60%E4%BD%99%E4%BA%BA%E6%8C%A5%E9%9C%8D5000%E4%B8%87","show":[],"url":"https://m.baidu.com/s?word=%E4%B8%A4%E5%B9%B4%E6%97%B6%E9%97%B4%EF%BC%8C%E8%B6%B3%E5%8D%8F60%E4%BD%99%E4%BA%BA%E6%8C%A5%E9%9C%8D5000%E4%B8%87&sa=fyb_news","word":"两年时间,足协60余人挥霍5000万"},{"appUrl":"https://m.baidu.com/s?word=%E6%99%AE%E4%BA%AC%E5%BC%80%E7%8E%A9%E7%AC%91%EF%BC%9A%E5%BE%97%E5%B9%B2%E7%82%B9%E6%B4%BB%EF%BC%8C%E6%9C%88%E5%BA%95%E9%A2%86%E5%B7%A5%E8%B5%84&sa=fyb_news","desc":"当地时间5日晚,白俄罗斯总统卢卡申科到莫斯科与普京举行会谈。卢卡申科称普京是一个“疲惫的总统”,普京调侃:到月底就能结工资了,钱还是要赚的。","hotChange":"same","hotScore":"3569708","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/ae5461bc0475c94e19b8820bff1fd391","index":14,"indexUrl":"","query":"普京开玩笑:得干点活,月底领工资","rawUrl":"https://m.baidu.com/s?word=%E6%99%AE%E4%BA%AC%E5%BC%80%E7%8E%A9%E7%AC%91%EF%BC%9A%E5%BE%97%E5%B9%B2%E7%82%B9%E6%B4%BB%EF%BC%8C%E6%9C%88%E5%BA%95%E9%A2%86%E5%B7%A5%E8%B5%84","show":[],"url":"https://m.baidu.com/s?word=%E6%99%AE%E4%BA%AC%E5%BC%80%E7%8E%A9%E7%AC%91%EF%BC%9A%E5%BE%97%E5%B9%B2%E7%82%B9%E6%B4%BB%EF%BC%8C%E6%9C%88%E5%BA%95%E9%A2%86%E5%B7%A5%E8%B5%84&sa=fyb_news","word":"普京开玩笑:得干点活,月底领工资"},{"appUrl":"https://m.baidu.com/s?word=%E7%89%B9%E6%9C%97%E6%99%AE%E7%A7%B0%E4%BA%BA%E6%B0%91%E5%B8%81%E5%8F%AF%E8%83%BD%E5%8F%96%E4%BB%A3%E7%BE%8E%E5%85%83&sa=fyb_news","desc":"","hotChange":"same","hotScore":"3400909","hotTag":"0","img":"https://fyb-1.cdn.bcebos.com/fyb/de6163834f53ca92c1273fff98ac9078.jpeg","index":15,"indexUrl":"","query":"特朗普称人民币可能取代美元","rawUrl":"https://m.baidu.com/s?word=%E7%89%B9%E6%9C%97%E6%99%AE%E7%A7%B0%E4%BA%BA%E6%B0%91%E5%B8%81%E5%8F%AF%E8%83%BD%E5%8F%96%E4%BB%A3%E7%BE%8E%E5%85%83","show":[],"url":"https://m.baidu.com/s?word=%E7%89%B9%E6%9C%97%E6%99%AE%E7%A7%B0%E4%BA%BA%E6%B0%91%E5%B8%81%E5%8F%AF%E8%83%BD%E5%8F%96%E4%BB%A3%E7%BE%8E%E5%85%83&sa=fyb_news","word":"特朗普称人民币可能取代美元"},{"appUrl":"https://m.baidu.com/s?word=%E7%94%B7%E5%AD%90%E7%94%A8%E6%89%8B%E7%94%B5%E7%AD%92%E5%90%93%E6%AD%BB1100%E5%8F%AA%E9%B8%A1%E8%8E%B7%E5%88%91&sa=fyb_news","desc":"2022年4月,湖南衡阳县一男子在鸡棚门口用手电筒照射鸡群,导致1100多只鸡受到惊吓,因互相挤压、踩踏而死亡。最终男子被判处有期徒刑六个月。","hotChange":"same","hotScore":"3367064","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/b08f248f306e9921b9a43e575b61e14f","index":16,"indexUrl":"","query":"男子用手电筒吓死1100只鸡获刑","rawUrl":"https://m.baidu.com/s?word=%E7%94%B7%E5%AD%90%E7%94%A8%E6%89%8B%E7%94%B5%E7%AD%92%E5%90%93%E6%AD%BB1100%E5%8F%AA%E9%B8%A1%E8%8E%B7%E5%88%91","show":[],"url":"https://m.baidu.com/s?word=%E7%94%B7%E5%AD%90%E7%94%A8%E6%89%8B%E7%94%B5%E7%AD%92%E5%90%93%E6%AD%BB1100%E5%8F%AA%E9%B8%A1%E8%8E%B7%E5%88%91&sa=fyb_news","word":"男子用手电筒吓死1100只鸡获刑"},{"appUrl":"https://m.baidu.com/s?word=%E8%8B%8F%E7%82%B3%E6%B7%BB%E5%9B%9E%E5%BA%94%E6%89%8B%E6%9C%BA%E4%BB%8E%E5%B0%8F%E7%B1%B3%E6%8D%A2%E6%88%90%E8%8B%B9%E6%9E%9C&sa=fyb_news","desc":"","hotChange":"same","hotScore":"3222979","hotTag":"0","img":"https://fyb-1.cdn.bcebos.com/fyb/de6163834f53ca92c1273fff98ac9078.jpeg","index":17,"indexUrl":"","query":"苏炳添回应手机从小米换成苹果","rawUrl":"https://m.baidu.com/s?word=%E8%8B%8F%E7%82%B3%E6%B7%BB%E5%9B%9E%E5%BA%94%E6%89%8B%E6%9C%BA%E4%BB%8E%E5%B0%8F%E7%B1%B3%E6%8D%A2%E6%88%90%E8%8B%B9%E6%9E%9C","show":[],"url":"https://m.baidu.com/s?word=%E8%8B%8F%E7%82%B3%E6%B7%BB%E5%9B%9E%E5%BA%94%E6%89%8B%E6%9C%BA%E4%BB%8E%E5%B0%8F%E7%B1%B3%E6%8D%A2%E6%88%90%E8%8B%B9%E6%9E%9C&sa=fyb_news","word":"苏炳添回应手机从小米换成苹果"},{"appUrl":"https://m.baidu.com/s?word=%E6%B3%95%E9%99%A2%E8%AE%A4%E5%AE%9A%E8%B0%A2%E5%A8%9C%E5%BC%A0%E6%9D%B0%E8%B4%AD%E6%88%BF%E4%B8%8D%E5%AD%98%E5%9C%A8%E8%B7%B3%E5%8D%95&sa=fyb_news","desc":"近日,上海雅銮房产经纪有限公司与上海思和资产经营管理中心中介合同纠纷一审文书公开。法院审理认为,谢娜张杰购房不存在跳单。","hotChange":"same","hotScore":"3120913","hotTag":"3","hotTagImg":"https://search-operate.cdn.bcebos.com/54a1ed72d00cd07334860b0509489d8b.png","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/613775bcc804beb6743f00ca00dd469e","index":18,"indexUrl":"","query":"法院认定谢娜张杰购房不存在跳单","rawUrl":"https://m.baidu.com/s?word=%E6%B3%95%E9%99%A2%E8%AE%A4%E5%AE%9A%E8%B0%A2%E5%A8%9C%E5%BC%A0%E6%9D%B0%E8%B4%AD%E6%88%BF%E4%B8%8D%E5%AD%98%E5%9C%A8%E8%B7%B3%E5%8D%95","show":[],"url":"https://m.baidu.com/s?word=%E6%B3%95%E9%99%A2%E8%AE%A4%E5%AE%9A%E8%B0%A2%E5%A8%9C%E5%BC%A0%E6%9D%B0%E8%B4%AD%E6%88%BF%E4%B8%8D%E5%AD%98%E5%9C%A8%E8%B7%B3%E5%8D%95&sa=fyb_news","word":"法院认定谢娜张杰购房不存在跳单"},{"appUrl":"https://m.baidu.com/s?word=%E5%BC%A0%E8%89%BA%E5%85%B4%E8%B5%B7%E8%AF%89%E5%8D%81%E4%B9%9D%E6%A5%BC%E4%BE%B5%E6%9D%83%E8%83%9C%E8%AF%89&sa=fyb_news","desc":"","hotChange":"same","hotScore":"3094995","hotTag":"0","img":"https://fyb-1.cdn.bcebos.com/fyb/de6163834f53ca92c1273fff98ac9078.jpeg","index":19,"indexUrl":"","query":"张艺兴起诉十九楼侵权胜诉","rawUrl":"https://m.baidu.com/s?word=%E5%BC%A0%E8%89%BA%E5%85%B4%E8%B5%B7%E8%AF%89%E5%8D%81%E4%B9%9D%E6%A5%BC%E4%BE%B5%E6%9D%83%E8%83%9C%E8%AF%89","show":[],"url":"https://m.baidu.com/s?word=%E5%BC%A0%E8%89%BA%E5%85%B4%E8%B5%B7%E8%AF%89%E5%8D%81%E4%B9%9D%E6%A5%BC%E4%BE%B5%E6%9D%83%E8%83%9C%E8%AF%89&sa=fyb_news","word":"张艺兴起诉十九楼侵权胜诉"},{"appUrl":"https://m.baidu.com/s?word=%E5%B7%A5%E8%B5%84%E5%85%AD%E5%8D%83%E7%9A%84%E5%B2%97%E4%BD%8D%E9%9D%A2%E8%AF%95%E4%BA%866%E8%BD%AE&sa=fyb_news","desc":"近日,一女子发视频吐槽,自己面试一个工资六千块的工作,一共面试了6轮。对此有网友评论:怕不是被拉来完成KPI的吧!","hotChange":"same","hotScore":"2909089","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/48e87d1acf8a531c4f158d546b6ad064","index":20,"indexUrl":"","query":"工资六千的岗位面试了6轮","rawUrl":"https://m.baidu.com/s?word=%E5%B7%A5%E8%B5%84%E5%85%AD%E5%8D%83%E7%9A%84%E5%B2%97%E4%BD%8D%E9%9D%A2%E8%AF%95%E4%BA%866%E8%BD%AE","show":[],"url":"https://m.baidu.com/s?word=%E5%B7%A5%E8%B5%84%E5%85%AD%E5%8D%83%E7%9A%84%E5%B2%97%E4%BD%8D%E9%9D%A2%E8%AF%95%E4%BA%866%E8%BD%AE&sa=fyb_news","word":"工资六千的岗位面试了6轮"},{"appUrl":"https://m.baidu.com/s?word=%E7%94%B7%E5%AD%90%E5%9C%A8%E5%B9%BF%E5%B7%9E%E5%8D%97%E7%AB%99%E5%BC%BA%E8%A1%8C%E6%8C%89%E5%80%92%E5%87%BB%E6%89%93%E5%A5%B3%E5%AD%90&sa=fyb_news","desc":"4月5日,广州南站一男子将女子强行按倒在地,随后两次动手击打,这一幕被乘客记录下来。广州南站工作人员称,警方正在调查。","hotChange":"same","hotScore":"2899750","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/b0cc1aed0eed0ca10d256ae62288db70","index":21,"indexUrl":"","query":"男子在广州南站强行按倒击打女子","rawUrl":"https://m.baidu.com/s?word=%E7%94%B7%E5%AD%90%E5%9C%A8%E5%B9%BF%E5%B7%9E%E5%8D%97%E7%AB%99%E5%BC%BA%E8%A1%8C%E6%8C%89%E5%80%92%E5%87%BB%E6%89%93%E5%A5%B3%E5%AD%90","show":[],"url":"https://m.baidu.com/s?word=%E7%94%B7%E5%AD%90%E5%9C%A8%E5%B9%BF%E5%B7%9E%E5%8D%97%E7%AB%99%E5%BC%BA%E8%A1%8C%E6%8C%89%E5%80%92%E5%87%BB%E6%89%93%E5%A5%B3%E5%AD%90&sa=fyb_news","word":"男子在广州南站强行按倒击打女子"},{"appUrl":"https://m.baidu.com/s?word=%E9%A9%AC%E8%8B%B1%E4%B9%9D%E5%A4%A7%E9%99%86%E8%A1%8C%E6%9C%80%E5%90%8E%E4%B8%80%E7%AB%99&sa=fyb_news","desc":"6日是马英九大陆行的第11天,也是他有参访活动的最后一天,马英九的大陆行最后一站是上海。7日上午,马英九一行计划乘坐11点多的飞机返回台湾。","hotChange":"same","hotScore":"2706404","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/b17f08749f44bbda82ad8595b6e5ba41","index":22,"indexUrl":"","query":"马英九大陆行最后一站","rawUrl":"https://m.baidu.com/s?word=%E9%A9%AC%E8%8B%B1%E4%B9%9D%E5%A4%A7%E9%99%86%E8%A1%8C%E6%9C%80%E5%90%8E%E4%B8%80%E7%AB%99","show":[],"url":"https://m.baidu.com/s?word=%E9%A9%AC%E8%8B%B1%E4%B9%9D%E5%A4%A7%E9%99%86%E8%A1%8C%E6%9C%80%E5%90%8E%E4%B8%80%E7%AB%99&sa=fyb_news","word":"马英九大陆行最后一站"},{"appUrl":"https://m.baidu.com/s?word=%E7%BD%97%E5%BF%97%E5%86%9B%E9%81%97%E4%BD%93%E9%80%81%E5%88%AB%E4%BB%AA%E5%BC%8F%E5%9C%A8%E5%8C%97%E4%BA%AC%E4%B8%BE%E8%A1%8C&sa=fyb_news","desc":"中国共产党的优秀党员罗志军同志,因病于4月1日在北京不幸离世,享年72岁。4月5日上午,罗志军同志遗体送别仪式在北京八宝山殡仪馆举行。","hotChange":"same","hotScore":"2626987","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/dc93a283f043c0a5f554381d67960067","index":23,"indexUrl":"","query":"罗志军遗体送别仪式在北京举行","rawUrl":"https://m.baidu.com/s?word=%E7%BD%97%E5%BF%97%E5%86%9B%E9%81%97%E4%BD%93%E9%80%81%E5%88%AB%E4%BB%AA%E5%BC%8F%E5%9C%A8%E5%8C%97%E4%BA%AC%E4%B8%BE%E8%A1%8C","show":[],"url":"https://m.baidu.com/s?word=%E7%BD%97%E5%BF%97%E5%86%9B%E9%81%97%E4%BD%93%E9%80%81%E5%88%AB%E4%BB%AA%E5%BC%8F%E5%9C%A8%E5%8C%97%E4%BA%AC%E4%B8%BE%E8%A1%8C&sa=fyb_news","word":"罗志军遗体送别仪式在北京举行"},{"appUrl":"https://m.baidu.com/s?word=%E6%B1%9F%E8%A5%BF%E4%B8%80%E7%94%B7%E5%AD%A9%E5%B9%BC%E5%84%BF%E5%9B%AD%E5%86%85%E6%AD%BB%E4%BA%A1+%E5%AE%98%E6%96%B9%E8%B0%83%E6%9F%A5&sa=fyb_news","desc":"近日,网曝江西吉安鹭洲府邸幼儿园一男孩在园内死亡。吉州区教体局工作人员表示,已第一时间介入调查,后续会有情况说明。","hotChange":"same","hotScore":"2573387","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/74a99d3b6146f8cee7eb039a5bcf3bab","index":24,"indexUrl":"","query":"江西一男孩幼儿园内死亡 官方调查","rawUrl":"https://m.baidu.com/s?word=%E6%B1%9F%E8%A5%BF%E4%B8%80%E7%94%B7%E5%AD%A9%E5%B9%BC%E5%84%BF%E5%9B%AD%E5%86%85%E6%AD%BB%E4%BA%A1+%E5%AE%98%E6%96%B9%E8%B0%83%E6%9F%A5","show":[],"url":"https://m.baidu.com/s?word=%E6%B1%9F%E8%A5%BF%E4%B8%80%E7%94%B7%E5%AD%A9%E5%B9%BC%E5%84%BF%E5%9B%AD%E5%86%85%E6%AD%BB%E4%BA%A1+%E5%AE%98%E6%96%B9%E8%B0%83%E6%9F%A5&sa=fyb_news","word":"江西一男孩幼儿园内死亡 官方调查"},{"appUrl":"https://m.baidu.com/s?word=%E7%A1%95%E5%8D%9A%E6%AF%95%E4%B8%9A%E4%BA%BA%E6%95%B0%E8%B6%85%E6%9C%AC%E7%A7%91%E7%94%9F%EF%BC%8C%E4%B9%8B%E5%90%8E%E5%91%A2%EF%BC%9F&sa=fyb_news","desc":"日前,“北京硕博毕业生人数首超本科生”话题登上多个社交平台热搜。那么本科生研究生人数倒挂,是好是坏?研究生“过剩”了吗,他们又该怎么办?","hotChange":"same","hotScore":"2487567","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/d488e71fbe6822ecc07a4840353c5e49","index":25,"indexUrl":"","query":"硕博毕业人数超本科生,之后呢?","rawUrl":"https://m.baidu.com/s?word=%E7%A1%95%E5%8D%9A%E6%AF%95%E4%B8%9A%E4%BA%BA%E6%95%B0%E8%B6%85%E6%9C%AC%E7%A7%91%E7%94%9F%EF%BC%8C%E4%B9%8B%E5%90%8E%E5%91%A2%EF%BC%9F","show":[],"url":"https://m.baidu.com/s?word=%E7%A1%95%E5%8D%9A%E6%AF%95%E4%B8%9A%E4%BA%BA%E6%95%B0%E8%B6%85%E6%9C%AC%E7%A7%91%E7%94%9F%EF%BC%8C%E4%B9%8B%E5%90%8E%E5%91%A2%EF%BC%9F&sa=fyb_news","word":"硕博毕业人数超本科生,之后呢?"},{"appUrl":"https://m.baidu.com/s?word=%E7%99%BD%E7%B3%96%E4%BB%B7%E6%A0%BC%E5%88%9B%E4%BA%94%E5%B9%B4%E6%96%B0%E9%AB%98&sa=fyb_news","desc":"","hotChange":"same","hotScore":"2311742","hotTag":"0","img":"https://fyb-1.cdn.bcebos.com/fyb/de6163834f53ca92c1273fff98ac9078.jpeg","index":26,"indexUrl":"","query":"白糖价格创五年新高","rawUrl":"https://m.baidu.com/s?word=%E7%99%BD%E7%B3%96%E4%BB%B7%E6%A0%BC%E5%88%9B%E4%BA%94%E5%B9%B4%E6%96%B0%E9%AB%98","show":[],"url":"https://m.baidu.com/s?word=%E7%99%BD%E7%B3%96%E4%BB%B7%E6%A0%BC%E5%88%9B%E4%BA%94%E5%B9%B4%E6%96%B0%E9%AB%98&sa=fyb_news","word":"白糖价格创五年新高"},{"appUrl":"https://m.baidu.com/s?word=%E5%8C%97%E6%96%B9%E7%9A%84%E6%8A%A5%E5%A4%8D%E6%80%A7%E5%8D%87%E6%B8%A9%E5%8F%88%E6%9D%A5%E4%BA%86&sa=fyb_news","desc":"近日,冷空气间歇期,北方将迎来报复性升温,下周一前后华北平原一些地方最高气温预计冲到将近30℃。","hotChange":"same","hotScore":"2221301","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/63dfd0cd341b7fc5f7133b717181798b","index":27,"indexUrl":"","query":"北方的报复性升温又来了","rawUrl":"https://m.baidu.com/s?word=%E5%8C%97%E6%96%B9%E7%9A%84%E6%8A%A5%E5%A4%8D%E6%80%A7%E5%8D%87%E6%B8%A9%E5%8F%88%E6%9D%A5%E4%BA%86","show":[],"url":"https://m.baidu.com/s?word=%E5%8C%97%E6%96%B9%E7%9A%84%E6%8A%A5%E5%A4%8D%E6%80%A7%E5%8D%87%E6%B8%A9%E5%8F%88%E6%9D%A5%E4%BA%86&sa=fyb_news","word":"北方的报复性升温又来了"},{"appUrl":"https://m.baidu.com/s?word=%E4%B8%8A%E7%99%BE%E4%BA%BA%E8%BF%9B%E5%B1%B1%E6%8C%96%E9%BB%84%E9%87%91%EF%BC%9F%E5%AE%98%E6%96%B9%3A%E6%8C%96%E7%9A%84%E6%98%AF%E6%98%86%E8%99%AB&sa=fyb_news","desc":"5日,有网友发视频称上百人进山挖黄金引起社会关注。6日,安峰镇人民政府称此事存在误会,视频中人们挖的是一种当地称之为“土黄金”的昆虫。","hotChange":"same","hotScore":"2179428","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/fe8584b597b39adf73966264fd50961a","index":28,"indexUrl":"","query":"上百人进山挖黄金?官方:挖的是昆虫","rawUrl":"https://m.baidu.com/s?word=%E4%B8%8A%E7%99%BE%E4%BA%BA%E8%BF%9B%E5%B1%B1%E6%8C%96%E9%BB%84%E9%87%91%EF%BC%9F%E5%AE%98%E6%96%B9%3A%E6%8C%96%E7%9A%84%E6%98%AF%E6%98%86%E8%99%AB","show":[],"url":"https://m.baidu.com/s?word=%E4%B8%8A%E7%99%BE%E4%BA%BA%E8%BF%9B%E5%B1%B1%E6%8C%96%E9%BB%84%E9%87%91%EF%BC%9F%E5%AE%98%E6%96%B9%3A%E6%8C%96%E7%9A%84%E6%98%AF%E6%98%86%E8%99%AB&sa=fyb_news","word":"上百人进山挖黄金?官方:挖的是昆虫"},{"appUrl":"https://m.baidu.com/s?word=%E7%94%B7%E5%AD%90%E5%8F%960.94%E5%85%83%E9%81%AD%E9%93%B6%E8%A1%8C%E6%8A%B9%E9%9B%B6&sa=fyb_news","desc":"","hotChange":"same","hotScore":"2076073","hotTag":"0","img":"https://fyb-1.cdn.bcebos.com/fyb/de6163834f53ca92c1273fff98ac9078.jpeg","index":29,"indexUrl":"","query":"男子取0.94元遭银行抹零","rawUrl":"https://m.baidu.com/s?word=%E7%94%B7%E5%AD%90%E5%8F%960.94%E5%85%83%E9%81%AD%E9%93%B6%E8%A1%8C%E6%8A%B9%E9%9B%B6","show":[],"url":"https://m.baidu.com/s?word=%E7%94%B7%E5%AD%90%E5%8F%960.94%E5%85%83%E9%81%AD%E9%93%B6%E8%A1%8C%E6%8A%B9%E9%9B%B6&sa=fyb_news","word":"男子取0.94元遭银行抹零"}],"more":0,"moreAppUrl":"https://top.baidu.com/board?tab=realtime&sa=fyb_realtime","moreUrl":"https://top.baidu.com/board?tab=realtime&sa=fyb_realtime","text":"热搜榜","topContent":[{"appUrl":"https://m.baidu.com/s?word=%E9%A2%84%E8%AE%A1%E5%85%A8%E5%B9%B4%E4%B8%BA%E7%BB%8F%E8%90%A5%E4%B8%BB%E4%BD%93%E5%87%8F%E7%A8%8E%E8%B6%851.8%E4%B8%87%E4%BA%BF&sa=fyb_news","desc":"国务院新闻办公室6日举行发布会。国家税务总局副局长王道树表示,预计全年新增减税降费1.2万亿元,预计全年可为经营主体减轻税费负担超1.8万亿元。","hotChange":"same","hotScore":"4972707","hotTag":"0","img":"https://fyb-2.cdn.bcebos.com/hotboard_image/89daa976c0c4a459ce7a18823da1b8dc","index":0,"indexUrl":"","query":"预计全年为经营主体减税超1.8万亿","rawUrl":"https://m.baidu.com/s?word=%E9%A2%84%E8%AE%A1%E5%85%A8%E5%B9%B4%E4%B8%BA%E7%BB%8F%E8%90%A5%E4%B8%BB%E4%BD%93%E5%87%8F%E7%A8%8E%E8%B6%851.8%E4%B8%87%E4%BA%BF","show":[],"url":"https://m.baidu.com/s?word=%E9%A2%84%E8%AE%A1%E5%85%A8%E5%B9%B4%E4%B8%BA%E7%BB%8F%E8%90%A5%E4%B8%BB%E4%BD%93%E5%87%8F%E7%A8%8E%E8%B6%851.8%E4%B8%87%E4%BA%BF&sa=fyb_news","word":"预计全年为经营主体减税超1.8万亿"}],"typeName":"realtime","updateTime":"1680784500"},"debug":"","exec_time":0.10726,"user_ip":"183.219.42.60"}
错误码类型说明
403int没有权限
400int参数传递不正确
500int服务器内部错误
本示例代码演示了接口的基础调用流程,开发者需自行将代码中的默认值替换为实际的API接口认证信息。

<?php
/**
 * API请求DEMO
 * 
 * 本demo支持常见的HTTP请求方法(GET/POST/PUT/DELETE等)
 */

 //基本配置
$api_key = '你的接口密钥,登录控制台后在密钥管理页面申请';
$secret_key = '';

// API请求示例:
try {
    $client = new ApiClient($api_key, $secret_key);
    $client->setTimeout(10);
    $client->setVerifySSL(false); // 关闭SSL验证

    // GET请求示例
    echo "=== 开始GET请求 ===\n";
    $response = $client->get('https://api.bjjii.com/api/top/', [
        'key' => $api_key,
        'key2' => '其他参数'
    ]);
    print_r($response);
    //print_r($client->getLastRequestInfo());
    /* 
    // POST表单示例
    echo "\n=== 开始POST请求 ===\n";
    $response = $client->post('接口地址', [
        'key' => $api_key,
        'key2' => '其他参数'
    ]);
    print_r($response);
    print_r($client->getLastRequestInfo());

    // POST JSON示例
    echo "\n=== 开始POST JSON请求 ===\n";
    $response = $client->postJson('接口地址', [
        'key' => $api_key,
        'key2' => '其他参数'
    ]);
    print_r($response);
    print_r($client->getLastRequestInfo());
     */
} catch (ApiClientException $e) {
    echo "API请求错误: " . $e->getMessage();
    if ($e->getCode() > 0) {
        echo " (HTTP状态码: " . $e->getCode() . ")";
    }
    print_r($client->getLastRequestInfo() ?? []);
}

/**
 * API客户端类
 * 
 * 提供了一个简单的HTTP API客户端实现,支持常见的HTTP请求方法(GET/POST/PUT/DELETE等)
 * 具有以下主要功能:
 * - 支持 API 密钥和签名认证
 * - 可配置请求超时和SSL验证
 * - 支持自定义请求头
 * - 支持表单和JSON格式的请求体
 * - 自动解析响应结果
 * - 提供详细的请求信息记录
 * 
 * 使用示例:
 * ```
 * $client = new ApiClient('https://api.example.com', 'api_key', 'secret_key');
 * $response = $client->get('/users', ['page' => 1]);
 * ```
 * 
 * @throws ApiClientException 当API请求失败时抛出异常
 */
class ApiClient
{
    private $apiKey;
    private $secretKey;
    private $timeout = 30;
    private $verifySSL = true;
    private $lastRequestInfo = [];
    private $defaultHeaders = [];

    /**
     * 构造函数
     * 
     * @param string $apiKey  API密钥(可选)
     * @param string $secretKey 签名密钥(可选)
     */
    public function __construct(string $apiKey = '', string $secretKey = '')
    {
        $this->apiKey = $apiKey;
        $this->secretKey = $secretKey;
    }

    /**
     * 设置请求超时时间(秒)
     */
    public function setTimeout(int $seconds): self
    {
        $this->timeout = $seconds;
        return $this;
    }

    /**
     * 设置是否验证SSL证书
     */
    public function setVerifySSL(bool $verify): self
    {
        $this->verifySSL = $verify;
        return $this;
    }

    /**
     * 添加默认请求头
     */
    public function addDefaultHeader(string $name, string $value): self
    {
        $this->defaultHeaders[$name] = $value;
        return $this;
    }

    /**
     * 发送GET请求
     * 
     * @param string $endpoint 接口端点
     * @param array  $query    查询参数
     * @param array  $headers  额外请求头
     */
    public function get(string $endpoint, array $query = [], array $headers = []): array
    {
        return $this->request('GET', $endpoint, [
            'query' => $query,
            'headers' => $headers
        ]);
    }

    /**
     * 发送POST请求(表单格式)
     * 
     * @param string $endpoint 接口端点
     * @param array  $data     POST数据
     * @param array  $headers  额外请求头
     */
    public function post(string $endpoint, array $data = [], array $headers = []): array
    {
        return $this->request('POST', $endpoint, [
            'form_data' => $data,
            'headers' => $headers
        ]);
    }

    /**
     * 发送POST请求(JSON格式)
     * 
     * @param string $endpoint 接口端点
     * @param array  $data     POST数据
     * @param array  $headers  额外请求头
     */
    public function postJson(string $endpoint, array $data = [], array $headers = []): array
    {
        return $this->request('POST', $endpoint, [
            'json' => $data,
            'headers' => array_merge(['Content-Type' => 'application/json'], $headers)
        ]);
    }

    /**
     * 发送PUT请求
     */
    public function put(string $endpoint, array $data = [], array $headers = []): array
    {
        return $this->request('PUT', $endpoint, [
            'json' => $data,
            'headers' => $headers
        ]);
    }

    /**
     * 发送DELETE请求
     */
    public function delete(string $endpoint, array $data = [], array $headers = []): array
    {
        return $this->request('DELETE', $endpoint, [
            'json' => $data,
            'headers' => $headers
        ]);
    }

    /**
     * 获取最后一次请求的详细信息
     */
    public function getLastRequestInfo(): array
    {
        return $this->lastRequestInfo;
    }

    /**
     * 基础请求方法
     */
    private function request(string $method, string $endpoint, array $options = []): array
    {
        // 初始化cURL
        $ch = curl_init();
        $url = ltrim($endpoint, '/');

        // 准备请求头
        $headers = $this->prepareHeaders($options['headers'] ?? []);

        // 处理查询参数
        if (!empty($options['query'])) {
            $url .= '?' . http_build_query($options['query']);
        }

        // 处理请求体
        $postData = null;
        if (isset($options['form_data'])) {
            $postData = http_build_query($options['form_data']);
            $headers[] = 'Content-Type: application/x-www-form-urlencoded';
        } elseif (isset($options['json'])) {
            $postData = json_encode($options['json']);
            $headers[] = 'Content-Type: application/json';
        }

        // 设置cURL选项
        curl_setopt_array($ch, [
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_CUSTOMREQUEST => $method,
            CURLOPT_HTTPHEADER => $headers,
            CURLOPT_TIMEOUT => $this->timeout,
            CURLOPT_SSL_VERIFYPEER => $this->verifySSL,
            CURLOPT_SSL_VERIFYHOST => $this->verifySSL,
            CURLOPT_HEADER => true,
        ]);

        if ($method !== 'GET' && $postData !== null) {
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
        }

        // 执行请求
        $response = curl_exec($ch);
        $error = curl_error($ch);
        $info = $this->lastRequestInfo = curl_getinfo($ch);
        curl_close($ch);

        // 处理错误
        if ($error) {
            throw new ApiClientException("cURL请求失败: " . $error);
        }

        // 分离响应头和响应体
        $headerSize = $info['header_size'];
        $responseHeaders = substr($response, 0, $headerSize);
        $responseBody = substr($response, $headerSize);

        // 解析响应
        $result = json_decode($responseBody, true) ?? $responseBody;

        // 检查HTTP状态码
        if ($info['http_code'] >= 400) {
            $errorMsg = is_array($result) ? ($result['message'] ?? $responseBody) : $responseBody;
            throw new ApiClientException("API请求失败: " . $errorMsg, $info['http_code']);
        }

        return [
            'status' => $info['http_code'],
            'headers' => $this->parseHeaders($responseHeaders),
            'data' => $result
        ];
    }

    /**
     * 准备请求头(自动添加签名)
     */
    private function prepareHeaders(array $headers): array
    {
        // 合并默认头
        $headers = array_merge($this->defaultHeaders, $headers);

        // 添加签名头
        if ($this->apiKey && $this->secretKey) {
            $timestamp = time();
            $signString = "key={$this->apiKey}&timestamp={$timestamp}";
            $signature = hash_hmac('sha256', $signString, $this->secretKey);

            $headers['X-Api-Key'] = $this->apiKey;
            $headers['X-Api-Timestamp'] = $timestamp;
            $headers['X-Api-Sign'] = $signature;
        }

        // 转换为cURL格式
        $curlHeaders = [];
        foreach ($headers as $name => $value) {
            $curlHeaders[] = "$name: $value";
        }

        return $curlHeaders;
    }

    /**
     * 解析响应头
     */
    private function parseHeaders(string $headers): array
    {
        $parsed = [];
        foreach (explode("\r\n", $headers) as $i => $line) {
            if ($i === 0) {
                $parsed['HTTP_CODE'] = $line;
            } else {
                $parts = explode(': ', $line, 2);
                if (count($parts) === 2) {
                    $parsed[$parts[0]] = $parts[1];
                }
            }
        }
        return $parsed;
    }
}

class ApiClientException extends \Exception
{
    // 自定义异常类
}





/**
 * 原生JS通用API请求函数(支持GET/POST,JSON格式)
 * @param {string} url - API接口完整地址
 * @param {string} method - 请求方法,仅支持GET/POST
 * @param {object} [data={}] - 请求参数(GET拼接到URL,POST作为JSON请求体)
 * @returns {Promise} - 返回接口响应的JSON数据
 */
async function requestApi(url, method, data = {}) {
  try {
    // 处理GET请求:拼接参数到URL
    let requestUrl = url;
    if (method.toUpperCase() === 'GET' && Object.keys(data).length > 0) {
      const params = new URLSearchParams(data).toString();
      requestUrl = `${requestUrl}${requestUrl.includes('?') ? '&' : '?'}${params}`;
    }

    // 配置请求选项
    const requestOptions = {
      method: method.toUpperCase(),
      headers: { 'Content-Type': 'application/json' },
      credentials: 'include' // 跨域时携带Cookie,不需要可改为omit
    };

    // 处理POST请求:设置JSON请求体
    if (method.toUpperCase() === 'POST') {
      requestOptions.body = JSON.stringify(data);
    }

    // 发送请求并处理响应
    const response = await fetch(requestUrl, requestOptions);
    if (!response.ok) throw new Error(`请求失败:${response.status} ${response.statusText}`);
    const result = await response.json(); // 自动解析JSON响应
    return result;

  } catch (error) {
    console.error('API请求错误:', error.message);
    throw error; // 抛出错误供调用方处理
  }
}

// -------------------------- 使用示例 --------------------------
// 1. GET请求示例(查询数据)
async function testGet() {
  try {
    const data = await requestApi(
      'https://api.example.com/user/list', // 替换为实际接口地址
      'GET',
      { page: 1, size: 10, keyword: 'test' } // GET请求参数
    );
    console.log('GET请求成功:', data);
    // 业务逻辑处理...
  } catch (err) {
    alert('GET请求失败:' + err.message);
  }
}

// 2. POST请求示例(提交数据)
async function testPost() {
  try {
    const data = await requestApi(
      'https://api.example.com/user/login', // 替换为实际接口地址
      'POST',
      { username: 'admin', password: '123456' } // POST请求体数据
    );
    console.log('POST请求成功:', data);
    // 业务逻辑处理...
  } catch (err) {
    alert('POST请求失败:' + err.message);
  }
}

// 执行请求(按需调用)
// testGet();
// testPost();

import okhttp3.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * Java 单文件实现GET/POST(JSON) API请求
 * 基于OkHttp和Jackson,复制后直接使用(需添加Maven/Gradle依赖)
 */
public class ApiRequest {
    // 全局OkHttpClient实例(复用连接池)
    private static final OkHttpClient OK_HTTP_CLIENT = new OkHttpClient.Builder()
            .connectTimeout(10, TimeUnit.SECONDS)
            .readTimeout(10, TimeUnit.SECONDS)
            .writeTimeout(10, TimeUnit.SECONDS)
            .build();

    // Jackson JSON解析工具
    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();

    /**
     * GET请求方法
     * @param url 接口地址
     * @param params URL参数键值对
     * @return 接口响应字符串
     * @throws IOException 网络异常
     */
    public static String doGet(String url, Map params) throws IOException {
        HttpUrl.Builder urlBuilder = HttpUrl.parse(url).newBuilder();
        if (params != null && !params.isEmpty()) {
            for (Map.Entry entry : params.entrySet()) {
                urlBuilder.addQueryParameter(entry.getKey(), entry.getValue());
            }
        }
        Request request = new Request.Builder().url(urlBuilder.build()).get().build();
        try (Response response = OK_HTTP_CLIENT.newCall(request).execute()) {
            if (!response.isSuccessful()) {
                throw new IOException("GET请求失败:" + response.code() + " " + response.message());
            }
            return response.body() != null ? response.body().string() : "";
        }
    }

    /**
     * POST(JSON)请求方法
     * @param url 接口地址
     * @param jsonStr JSON请求体字符串
     * @return 接口响应字符串
     * @throws IOException 网络异常
     */
    public static String doPostJson(String url, String jsonStr) throws IOException {
        MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
        RequestBody requestBody = RequestBody.create(mediaType, jsonStr);
        Request request = new Request.Builder().url(url).post(requestBody).build();
        try (Response response = OK_HTTP_CLIENT.newCall(request).execute()) {
            if (!response.isSuccessful()) {
                throw new IOException("POST请求失败:" + response.code() + " " + response.message());
            }
            return response.body() != null ? response.body().string() : "";
        }
    }

    /**
     * 格式化JSON字符串(便于阅读)
     * @param jsonStr 原始JSON字符串
     * @return 格式化后的JSON
     * @throws IOException 解析异常
     */
    public static String formatJson(String jsonStr) throws IOException {
        if (jsonStr == null || jsonStr.isEmpty()) {
            return "";
        }
        Object jsonObj = OBJECT_MAPPER.readValue(jsonStr, Object.class);
        return OBJECT_MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(jsonObj);
    }

    // 主方法:测试GET/POST请求
    public static void main(String[] args) {
        try {
            // ------------------- 测试GET请求 -------------------
            String getUrl = "https://api.example.com/user/list"; // 替换为实际接口地址
            Map getParams = new HashMap<>();
            getParams.put("page", "1");
            getParams.put("size", "10");
            getParams.put("keyword", "test");
            String getResponse = doGet(getUrl, getParams);
            System.out.println("=== GET请求响应结果 ===");
            System.out.println(formatJson(getResponse));

            System.out.println("------------------------");

            // ------------------- 测试POST请求 -------------------
            String postUrl = "https://api.example.com/user/login"; // 替换为实际接口地址
            Map postData = new HashMap<>();
            postData.put("username", "admin");
            postData.put("password", "123456");
            String jsonStr = OBJECT_MAPPER.writeValueAsString(postData);
            String postResponse = doPostJson(postUrl, jsonStr);
            System.out.println("=== POST请求响应结果 ===");
            System.out.println(formatJson(postResponse));

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
	"time"
)

// 全局HTTP客户端,设置超时时间
var httpClient = &http.Client{
	Timeout: 10 * time.Second, // 请求超时时间10秒
}

// DoGet 发送GET请求,自动拼接URL参数
// urlStr: 接口地址
// params: URL查询参数(键值对)
// 返回:响应体字符串、错误信息
func DoGet(urlStr string, params map[string]string) (string, error) {
	// 解析基础URL
	parsedUrl, err := url.Parse(urlStr)
	if err != nil {
		return "", fmt.Errorf("URL解析失败: %v", err)
	}

	// 拼接查询参数
	query := parsedUrl.Query()
	for key, value := range params {
		query.Add(key, value)
	}
	parsedUrl.RawQuery = query.Encode()

	// 发送GET请求
	resp, err := httpClient.Get(parsedUrl.String())
	if err != nil {
		return "", fmt.Errorf("GET请求失败: %v", err)
	}
	defer resp.Body.Close() // 确保响应体关闭

	// 检查响应状态码
	if resp.StatusCode < 200 || resp.StatusCode >= 300 {
		return "", fmt.Errorf("请求返回异常状态码: %d", resp.StatusCode)
	}

	// 读取响应体
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return "", fmt.Errorf("读取响应体失败: %v", err)
	}

	return string(body), nil
}

// DoPostJson 发送POST请求,JSON格式请求体
// urlStr: 接口地址
// data: 请求体数据(任意可序列化为JSON的结构体/Map)
// 返回:响应体字符串、错误信息
func DoPostJson(urlStr string, data interface{}) (string, error) {
	// 将数据序列化为JSON字节流
	jsonData, err := json.Marshal(data)
	if err != nil {
		return "", fmt.Errorf("JSON序列化失败: %v", err)
	}

	// 发送POST请求
	resp, err := httpClient.Post(urlStr, "application/json", bytes.NewBuffer(jsonData))
	if err != nil {
		return "", fmt.Errorf("POST请求失败: %v", err)
	}
	defer resp.Body.Close()

	// 检查响应状态码
	if resp.StatusCode < 200 || resp.StatusCode >= 300 {
		return "", fmt.Errorf("请求返回异常状态码: %d", resp.StatusCode)
	}

	// 读取响应体
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return "", fmt.Errorf("读取响应体失败: %v", err)
	}

	return string(body), nil
}

// FormatJson 格式化JSON字符串(便于控制台阅读)
func FormatJson(jsonStr string) string {
	var prettyJson bytes.Buffer
	err := json.Indent(&prettyJson, []byte(jsonStr), "", "  ")
	if err != nil {
		return jsonStr // 格式化失败则返回原字符串
	}
	return prettyJson.String()
}

func main() {
	// ------------------- 测试GET请求 -------------------
	fmt.Println("=== 开始测试GET请求 ===")
	getUrl := "https://api.example.com/user/list" // 替换为实际接口地址
	getParams := map[string]string{
		"page":    "1",
		"size":    "10",
		"keyword": "test",
	}
	getResp, err := DoGet(getUrl, getParams)
	if err != nil {
		fmt.Printf("GET请求出错: %v\n", err)
	} else {
		fmt.Println("GET请求响应结果:\n", FormatJson(getResp))
	}

	fmt.Println("------------------------")

	// ------------------- 测试POST请求 -------------------
	fmt.Println("=== 开始测试POST请求 ===")
	postUrl := "https://api.example.com/user/login" // 替换为实际接口地址
	// 定义POST请求体(可替换为自定义结构体)
	postData := map[string]string{
		"username": "admin",
		"password": "123456",
	}
	postResp, err := DoPostJson(postUrl, postData)
	if err != nil {
		fmt.Printf("POST请求出错: %v\n", err)
	} else {
		fmt.Println("POST请求响应结果:\n", FormatJson(postResp))
	}
}

import requests
import json

# 配置全局请求超时时间(单位:秒)
TIMEOUT = 10

def do_get(url: str, params: dict = None) -> str:
    """
    发送GET请求
    :param url: 接口地址
    :param params: URL查询参数(字典)
    :return: 响应体字符串(格式化后的JSON)
    :raises Exception: 请求失败时抛出异常
    """
    try:
        # 发送GET请求
        response = requests.get(url, params=params, timeout=TIMEOUT)
        # 检查响应状态码
        response.raise_for_status()
        # 返回格式化后的JSON字符串
        return json.dumps(response.json(), indent=2, ensure_ascii=False)
    except requests.exceptions.RequestException as e:
        raise Exception(f"GET请求失败: {str(e)}")

def do_post_json(url: str, data: dict = None) -> str:
    """
    发送POST请求(JSON格式请求体)
    :param url: 接口地址
    :param data: JSON请求体(字典)
    :return: 响应体字符串(格式化后的JSON)
    :raises Exception: 请求失败时抛出异常
    """
    try:
        # 发送POST请求,自动设置Content-Type为application/json
        response = requests.post(url, json=data, timeout=TIMEOUT)
        # 检查响应状态码
        response.raise_for_status()
        # 返回格式化后的JSON字符串
        return json.dumps(response.json(), indent=2, ensure_ascii=False)
    except requests.exceptions.RequestException as e:
        raise Exception(f"POST请求失败: {str(e)}")

if __name__ == "__main__":
    # ------------------- 测试GET请求 -------------------
    print("=== 开始测试GET请求 ===")
    get_url = "https://api.example.com/user/list"  # 替换为实际接口地址
    get_params = {
        "page": 1,
        "size": 10,
        "keyword": "test"
    }
    try:
        get_resp = do_get(get_url, get_params)
        print("GET请求响应结果:\n", get_resp)
    except Exception as e:
        print(e)

    print("-" * 40)

    # ------------------- 测试POST请求 -------------------
    print("=== 开始测试POST请求 ===")
    post_url = "https://api.example.com/user/login"  # 替换为实际接口地址
    post_data = {
        "username": "admin",
        "password": "123456"
    }
    try:
        post_resp = do_post_json(post_url, post_data)
        print("POST请求响应结果:\n", post_resp)
    except Exception as e:
        print(e)


const http = require('http');
const https = require('https');
const querystring = require('querystring');

/**
 * 通用请求函数(支持GET/POST,JSON格式)
 * @param {string} url - 接口完整地址
 * @param {string} method - GET/POST
 * @param {object} [data={}] - 请求参数(GET拼URL,POST为JSON体)
 * @returns {Promise} - 响应JSON数据
 */
function requestApi(url, method, data = {}) {
  return new Promise((resolve, reject) => {
    // 解析URL
    const urlObj = new URL(url);
    const isHttps = urlObj.protocol === 'https:';
    const client = isHttps ? https : http;

    // 处理GET参数
    let path = urlObj.pathname;
    if (method.toUpperCase() === 'GET' && Object.keys(data).length > 0) {
      const params = querystring.stringify(data);
      path += (urlObj.search ? '&' : '?') + params;
    }

    // 处理POST请求体
    let postData = '';
    if (method.toUpperCase() === 'POST') {
      postData = JSON.stringify(data);
    }

    // 配置请求选项
    const options = {
      hostname: urlObj.hostname,
      port: urlObj.port || (isHttps ? 443 : 80),
      path: path + urlObj.search,
      method: method.toUpperCase(),
      headers: {
        'Content-Type': 'application/json; charset=utf-8',
        'Content-Length': Buffer.byteLength(postData)
      }
    };

    // 发送请求
    const req = client.request(options, (res) => {
      let rawData = '';
      res.on('data', (chunk) => { rawData += chunk; });
      res.on('end', () => {
        try {
          // 解析JSON响应
          const result = JSON.parse(rawData);
          resolve(result);
        } catch (err) {
          reject(new Error(`响应解析失败: ${err.message}`));
        }
      });
    });

    // 错误处理
    req.on('error', (err) => {
      reject(new Error(`请求失败: ${err.message}`));
    });

    // 写入POST请求体
    if (method.toUpperCase() === 'POST') {
      req.write(postData);
    }
    req.end();
  });
}

// 测试主函数
async function main() {
  try {
    // ------------------- 测试GET请求 -------------------
    console.log('=== 开始测试GET请求 ===');
    const getUrl = 'https://api.example.com/user/list'; // 替换为实际接口
    const getParams = { page: 1, size: 10, keyword: 'test' };
    const getResult = await requestApi(getUrl, 'GET', getParams);
    console.log('GET请求响应:', JSON.stringify(getResult, null, 2));

    console.log('------------------------');

    // ------------------- 测试POST请求 -------------------
    console.log('=== 开始测试POST请求 ===');
    const postUrl = 'https://api.example.com/user/login'; // 替换为实际接口
    const postData = { username: 'admin', password: '123456' };
    const postResult = await requestApi(postUrl, 'POST', postData);
    console.log('POST请求响应:', JSON.stringify(postResult, null, 2));
  } catch (err) {
    console.error('请求出错:', err.message);
  }
}

// 执行测试
main();


#include 
#include 
#include 
#include 

// 定义缓冲区结构体,用于存储响应数据
typedef struct {
    char* data;
    size_t size;
} ResponseBuffer;

// libcurl的写回调函数,将响应数据写入缓冲区
static size_t write_callback(void* contents, size_t size, size_t nmemb, void* userp) {
    size_t realsize = size * nmemb;
    ResponseBuffer* buffer = (ResponseBuffer*)userp;

    // 重新分配内存存储响应数据
    char* temp = realloc(buffer->data, buffer->size + realsize + 1);
    if (temp == NULL) {
        fprintf(stderr, "内存分配失败!\n");
        return 0;
    }
    buffer->data = temp;
    memcpy(&(buffer->data[buffer->size]), contents, realsize);
    buffer->size += realsize;
    buffer->data[buffer->size] = '\0'; // 字符串结束符

    return realsize;
}

// 初始化响应缓冲区
void init_buffer(ResponseBuffer* buffer) {
    buffer->data = malloc(1);
    buffer->size = 0;
}

// 释放响应缓冲区内存
void free_buffer(ResponseBuffer* buffer) {
    free(buffer->data);
    buffer->data = NULL;
    buffer->size = 0;
}

/**
 * 发送GET请求
 * @param url 接口地址
 * @param params URL参数(格式:"key1=value1&key2=value2",传NULL则无参数)
 * @return 响应字符串(需手动free释放),失败返回NULL
 */
char* http_get(const char* url, const char* params) {
    CURL* curl = curl_easy_init();
    if (!curl) {
        fprintf(stderr, "CURL初始化失败!\n");
        return NULL;
    }

    ResponseBuffer buffer;
    init_buffer(&buffer);

    // 拼接GET请求的URL和参数
    char* full_url = NULL;
    if (params && strlen(params) > 0) {
        full_url = (char*)malloc(strlen(url) + strlen(params) + 2);
        sprintf(full_url, "%s?%s", url, params);
    } else {
        full_url = (char*)malloc(strlen(url) + 1);
        strcpy(full_url, url);
    }

    // 设置CURL选项
    curl_easy_setopt(curl, CURLOPT_URL, full_url);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L); // 超时时间10秒
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); // 跟随重定向

    // 执行GET请求
    CURLcode res = curl_easy_perform(curl);
    if (res != CURLE_OK) {
        fprintf(stderr, "GET请求失败: %s\n", curl_easy_strerror(res));
        free_buffer(&buffer);
        free(full_url);
        curl_easy_cleanup(curl);
        return NULL;
    }

    // 检查响应状态码
    long response_code;
    curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
    if (response_code < 200 || response_code >= 300) {
        fprintf(stderr, "GET请求返回异常状态码: %ld\n", response_code);
        free_buffer(&buffer);
        free(full_url);
        curl_easy_cleanup(curl);
        return NULL;
    }

    // 释放资源
    free(full_url);
    curl_easy_cleanup(curl);

    // 返回响应数据(需调用者手动free)
    return buffer.data;
}

/**
 * 发送POST请求(JSON格式请求体)
 * @param url 接口地址
 * @param json_data JSON请求体字符串
 * @return 响应字符串(需手动free释放),失败返回NULL
 */
char* http_post_json(const char* url, const char* json_data) {
    CURL* curl = curl_easy_init();
    if (!curl) {
        fprintf(stderr, "CURL初始化失败!\n");
        return NULL;
    }

    ResponseBuffer buffer;
    init_buffer(&buffer);

    // 设置CURL选项
    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L); // 超时时间10秒
    curl_easy_setopt(curl, CURLOPT_POST, 1L); // 启用POST请求

    // 设置JSON请求体和请求头
    struct curl_slist* headers = NULL;
    headers = curl_slist_append(headers, "Content-Type: application/json; charset=utf-8");
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_data);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(json_data));

    // 执行POST请求
    CURLcode res = curl_easy_perform(curl);
    if (res != CURLE_OK) {
        fprintf(stderr, "POST请求失败: %s\n", curl_easy_strerror(res));
        free_buffer(&buffer);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
        return NULL;
    }

    // 检查响应状态码
    long response_code;
    curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
    if (response_code < 200 || response_code >= 300) {
        fprintf(stderr, "POST请求返回异常状态码: %ld\n", response_code);
        free_buffer(&buffer);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
        return NULL;
    }

    // 释放资源
    curl_slist_free_all(headers);
    curl_easy_cleanup(curl);

    // 返回响应数据(需调用者手动free)
    return buffer.data;
}

int main(void) {
    // 初始化libcurl
    curl_global_init(CURL_GLOBAL_ALL);

    // ------------------- 测试GET请求 -------------------
    printf("=== 开始测试GET请求 ===\n");
    const char* get_url = "https://api.example.com/user/list"; // 替换为实际接口
    const char* get_params = "page=1&size=10&keyword=test";   // GET参数
    char* get_resp = http_get(get_url, get_params);
    if (get_resp) {
        printf("GET请求响应结果:\n%s\n", get_resp);
        free(get_resp); // 释放响应内存
    }

    printf("------------------------\n");

    // ------------------- 测试POST请求 -------------------
    printf("=== 开始测试POST请求 ===\n");
    const char* post_url = "https://api.example.com/user/login"; // 替换为实际接口
    const char* post_json = "{\"username\":\"admin\",\"password\":\"123456\"}"; // JSON请求体
    char* post_resp = http_post_json(post_url, post_json);
    if (post_resp) {
        printf("POST请求响应结果:\n%s\n", post_resp);
        free(post_resp); // 释放响应内存
    }

    // 清理libcurl全局资源
    curl_global_cleanup();
    return 0;
}


#include 
#include 
#include 
#include 

// 响应数据缓冲区类,封装内存管理
class ResponseBuffer {
public:
    std::string data; // 存储响应数据的字符串,自动管理内存

    // libcurl写回调函数,将响应数据写入缓冲区
    static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) {
        size_t realSize = size * nmemb;
        ResponseBuffer* buffer = static_cast(userp);
        buffer->data.append(static_cast(contents), realSize);
        return realSize;
    }
};

// HTTP请求工具类,封装GET/POST(JSON)方法
class HttpRequester {
private:
    CURL* curl; // CURL句柄
    long timeout; // 请求超时时间(秒)

public:
    // 构造函数:初始化CURL
    HttpRequester(long timeout = 10) : timeout(timeout) {
        curl_global_init(CURL_GLOBAL_ALL);
        curl = curl_easy_init();
        if (!curl) {
            throw std::runtime_error("CURL初始化失败!");
        }
        // 设置全局超时
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout);
        // 跟随HTTP重定向
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
    }

    // 析构函数:释放CURL资源
    ~HttpRequester() {
        if (curl) {
            curl_easy_cleanup(curl);
        }
        curl_global_cleanup();
    }

    // 禁用拷贝构造和赋值,避免资源重复释放
    HttpRequester(const HttpRequester&) = delete;
    HttpRequester& operator=(const HttpRequester&) = delete;

    /**
     * 发送GET请求
     * @param url 接口地址
     * @param params URL参数(格式:"key1=value1&key2=value2")
     * @return 响应字符串
     * @throws std::runtime_error 请求失败时抛出异常
     */
    std::string Get(const std::string& url, const std::string& params = "") {
        if (!curl) {
            throw std::runtime_error("CURL句柄未初始化");
        }

        // 拼接完整URL(带参数)
        std::string fullUrl = url;
        if (!params.empty()) {
            fullUrl += "?" + params;
        }

        ResponseBuffer buffer;
        // 设置CURL选项
        curl_easy_setopt(curl, CURLOPT_URL, fullUrl.c_str());
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ResponseBuffer::WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);

        // 执行GET请求
        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK) {
            throw std::runtime_error("GET请求失败: " + std::string(curl_easy_strerror(res)));
        }

        // 检查响应状态码
        long responseCode;
        curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &responseCode);
        if (responseCode < 200 || responseCode >= 300) {
            throw std::runtime_error("GET请求返回异常状态码: " + std::to_string(responseCode));
        }

        return buffer.data;
    }

    /**
     * 发送POST请求(JSON格式请求体)
     * @param url 接口地址
     * @param jsonData JSON请求体字符串
     * @return 响应字符串
     * @throws std::runtime_error 请求失败时抛出异常
     */
    std::string PostJson(const std::string& url, const std::string& jsonData) {
        if (!curl) {
            throw std::runtime_error("CURL句柄未初始化");
        }

        ResponseBuffer buffer;
        // 设置POST请求基础选项
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_POST, 1L); // 启用POST方法
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonData.c_str()); // 设置请求体
        curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, jsonData.length()); // 设置请求体长度
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ResponseBuffer::WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);

        // 设置JSON请求头
        struct curl_slist* headers = nullptr;
        headers = curl_slist_append(headers, "Content-Type: application/json; charset=utf-8");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

        // 执行POST请求
        CURLcode res = curl_easy_perform(curl);
        // 释放请求头链表(无论请求成功与否都要释放)
        curl_slist_free_all(headers);

        if (res != CURLE_OK) {
            throw std::runtime_error("POST请求失败: " + std::string(curl_easy_strerror(res)));
        }

        // 检查响应状态码
        long responseCode;
        curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &responseCode);
        if (responseCode < 200 || responseCode >= 300) {
            throw std::runtime_error("POST请求返回异常状态码: " + std::to_string(responseCode));
        }

        return buffer.data;
    }
};

// 主函数:测试GET/POST请求
int main() {
    try {
        // 创建HTTP请求器实例
        HttpRequester requester;

        // ------------------- 测试GET请求 -------------------
        std::cout << "=== 开始测试GET请求 ===" << std::endl;
        std::string getUrl = "https://api.example.com/user/list"; // 替换为实际接口
        std::string getParams = "page=1&size=10&keyword=test";   // GET参数
        std::string getResp = requester.Get(getUrl, getParams);
        std::cout << "GET请求响应结果:\n" << getResp << std::endl;

        std::cout << "------------------------" << std::endl;

        // ------------------- 测试POST请求 -------------------
        std::cout << "=== 开始测试POST请求 ===" << std::endl;
        std::string postUrl = "https://api.example.com/user/login"; // 替换为实际接口
        std::string postJson = R"({"username":"admin","password":"123456"})"; // JSON请求体(原生字符串避免转义)
        std::string postResp = requester.PostJson(postUrl, postJson);
        std::cout << "POST请求响应结果:\n" << postResp << std::endl;

    } catch (const std::exception& e) {
        // 捕获所有异常并打印
        std::cerr << "请求出错: " << e.what() << std::endl;
        return 1;
    }

    return 0;
}


using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Text.Json;

/// 
/// HTTP请求工具类,封装GET/POST(JSON)请求
/// 
public class HttpRequester
{
    // 静态HttpClient实例(推荐单例使用,避免频繁创建释放连接)
    private static readonly HttpClient _httpClient = new HttpClient
    {
        Timeout = TimeSpan.FromSeconds(10) // 设置10秒超时
    };

    /// 
    /// 发送GET请求
    /// 
    /// 接口完整地址
    /// URL查询参数(键值对)
    /// 格式化后的JSON响应字符串
    /// 请求失败时抛出异常
    public static async Task GetAsync(string url, System.Collections.Generic.Dictionary paramsDict = null)
    {
        // 拼接查询参数
        if (paramsDict != null && paramsDict.Count > 0)
        {
            var queryBuilder = new System.Text.StringBuilder();
            foreach (var pair in paramsDict)
            {
                queryBuilder.Append($"{Uri.EscapeDataString(pair.Key)}={Uri.EscapeDataString(pair.Value)}&");
            }
            string query = queryBuilder.ToString().TrimEnd('&');
            url += $"{(url.Contains("?") ? "&" : "?")}{query}";
        }

        // 发送GET请求
        using var response = await _httpClient.GetAsync(url);
        // 检查响应状态码,非2xx则抛出异常
        response.EnsureSuccessStatusCode();

        // 读取响应并格式化JSON
        string jsonResponse = await response.Content.ReadAsStringAsync();
        return FormatJson(jsonResponse);
    }

    /// 
    /// 发送POST请求(JSON格式请求体)
    /// 
    /// 接口完整地址
    /// 请求体数据(任意可序列化的对象)
    /// 格式化后的JSON响应字符串
    /// 请求失败时抛出异常
    public static async Task PostJsonAsync(string url, T data)
    {
        // 将对象序列化为JSON字符串
        string jsonData = JsonSerializer.Serialize(data, new JsonSerializerOptions { WriteIndented = false });
        // 构造JSON请求体
        using var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
        // 发送POST请求
        using var response = await _httpClient.PostAsync(url, content);
        // 检查响应状态码
        response.EnsureSuccessStatusCode();

        // 读取响应并格式化JSON
        string jsonResponse = await response.Content.ReadAsStringAsync();
        return FormatJson(jsonResponse);
    }

    /// 
    /// 格式化JSON字符串(便于阅读)
    /// 
    private static string FormatJson(string json)
    {
        if (string.IsNullOrEmpty(json)) return json;
        var jsonDoc = JsonDocument.Parse(json);
        return JsonSerializer.Serialize(jsonDoc, new JsonSerializerOptions { WriteIndented = true });
    }
}

/// 
/// 测试类,包含主函数
/// 
class Program
{
    // C# 7.1+支持Main方法为async
    static async Task Main(string[] args)
    {
        try
        {
            // ------------------- 测试GET请求 -------------------
            Console.WriteLine("=== 开始测试GET请求 ===");
            string getUrl = "https://api.example.com/user/list"; // 替换为实际接口
            var getParams = new System.Collections.Generic.Dictionary
            {
                { "page", "1" },
                { "size", "10" },
                { "keyword", "test" }
            };
            string getResponse = await HttpRequester.GetAsync(getUrl, getParams);
            Console.WriteLine("GET请求响应结果:\n" + getResponse);

            Console.WriteLine("------------------------");

            // ------------------- 测试POST请求 -------------------
            Console.WriteLine("=== 开始测试POST请求 ===");
            string postUrl = "https://api.example.com/user/login"; // 替换为实际接口
            // 定义请求体对象(可替换为自定义类)
            var postData = new
            {
                username = "admin",
                password = "123456"
            };
            string postResponse = await HttpRequester.PostJsonAsync(postUrl, postData);
            Console.WriteLine("POST请求响应结果:\n" + postResponse);
        }
        catch (HttpRequestException ex)
        {
            Console.WriteLine($"请求失败: {ex.Message}");
            if (ex.InnerException != null)
            {
                Console.WriteLine($"内部异常: {ex.InnerException.Message}");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"程序异常: {ex.Message}");
        }

        // 防止控制台立即关闭
        Console.WriteLine("\n按任意键退出...");
        Console.ReadKey();
    }
}


' 引入必要的命名空间
Imports System
Imports System.Net.Http
Imports System.Text
Imports System.Threading.Tasks
Imports System.Collections.Generic
Imports System.Text.Json
Imports System.Net.Http.Headers

''' 
''' HTTP请求工具类,封装GET/POST(JSON)核心逻辑
''' 基于.NET内置HttpClient,支持异步请求、JSON序列化/反序列化
''' 
Public Class HttpHelper
    ' 静态HttpClient单例(推荐单例使用,避免端口耗尽)
    Private Shared ReadOnly _httpClient As New HttpClient With {
        .Timeout = TimeSpan.FromSeconds(10) ' 设置10秒请求超时
    }

    ''' 
    ''' 发送GET请求,自动拼接URL参数
    ''' 
    ''' 接口基础地址
    ''' URL查询参数(键值对)
    ''' 格式化后的JSON响应字符串
    Public Shared Async Function SendGetRequestAsync(baseUrl As String, Optional parameters As Dictionary(Of String, String) = Nothing) As Task(Of String)
        Try
            ' 拼接查询参数
            Dim requestUrl As String = baseUrl
            If parameters IsNot Nothing AndAlso parameters.Count > 0 Then
                Dim queryBuilder As New StringBuilder()
                For Each pair In parameters
                    queryBuilder.Append($"{Uri.EscapeDataString(pair.Key)}={Uri.EscapeDataString(pair.Value)}&")
                Next
                Dim query As String = queryBuilder.ToString().TrimEnd("&"c)
                requestUrl &= If(requestUrl.Contains("?"), "&", "?") & query
            End If

            ' 发送GET请求并验证状态码
            Dim response As HttpResponseMessage = Await _httpClient.GetAsync(requestUrl)
            response.EnsureSuccessStatusCode()

            ' 读取响应并格式化JSON
            Dim responseJson As String = Await response.Content.ReadAsStringAsync()
            Return FormatJsonString(responseJson)
        Catch ex As HttpRequestException
            Throw New Exception($"GET请求失败:{ex.Message}", ex)
        End Try
    End Function

    ''' 
    ''' 发送POST请求(JSON格式请求体)
    ''' 
    ''' 请求体数据类型
    ''' 接口完整地址
    ''' 请求体数据(任意可序列化对象)
    ''' 格式化后的JSON响应字符串
    Public Shared Async Function SendPostJsonRequestAsync(Of T)(apiUrl As String, requestData As T) As Task(Of String)
        Try
            ' 将对象序列化为JSON字符串
            Dim jsonBody As String = JsonSerializer.Serialize(requestData, New JsonSerializerOptions With {.WriteIndented = False})
            ' 构造JSON请求体
            Dim content As New StringContent(jsonBody, Encoding.UTF8, "application/json")

            ' 发送POST请求并验证状态码
            Dim response As HttpResponseMessage = Await _httpClient.PostAsync(apiUrl, content)
            response.EnsureSuccessStatusCode()

            ' 读取响应并格式化JSON
            Dim responseJson As String = Await response.Content.ReadAsStringAsync()
            Return FormatJsonString(responseJson)
        Catch ex As HttpRequestException
            Throw New Exception($"POST请求失败:{ex.Message}", ex)
        End Try
    End Function

    ''' 
    ''' 添加全局请求头(如Token、API Key)
    ''' 
    ''' 请求头名称
    ''' 请求头值
    Public Shared Sub AddGlobalHeader(headerName As String, headerValue As String)
        If Not _httpClient.DefaultRequestHeaders.Contains(headerName) Then
            _httpClient.DefaultRequestHeaders.Add(headerName, headerValue)
        End If
    End Sub

    ''' 
    ''' 格式化JSON字符串,提升可读性
    ''' 
    ''' 原始JSON字符串
    ''' 格式化后的JSON
    Private Shared Function FormatJsonString(rawJson As String) As String
        If String.IsNullOrEmpty(rawJson) Then Return rawJson
        Dim jsonDoc As JsonDocument = JsonDocument.Parse(rawJson)
        Return JsonSerializer.Serialize(jsonDoc, New JsonSerializerOptions With {.WriteIndented = True})
    End Function
End Class

''' 
''' 测试程序入口,演示GET/POST请求的使用
''' 
Module Program
    ' VB.NET主函数,异步执行测试逻辑
    Sub Main()
        ' 同步等待异步方法执行(控制台程序专用)
        TestApiRequestsAsync().GetAwaiter().GetResult()
        ' 防止控制台立即关闭
        Console.WriteLine(vbCrLf & "按任意键退出程序...")
        Console.ReadKey()
    End Sub

    ''' 
    ''' 测试GET和POST API请求
    ''' 
    Private Async Function TestApiRequestsAsync() As Task
        Try
            ' 可选:添加全局请求头(如Token认证)
            ' HttpHelper.AddGlobalHeader("Authorization", "Bearer your_token_here")
            ' HttpHelper.AddGlobalHeader("X-API-Key", "your_api_key_here")

            ' ------------------- 测试GET请求 -------------------
            Console.WriteLine("=== 开始执行GET请求 ===")
            Dim getUrl As String = "https://api.example.com/user/list" ' 替换为实际接口地址
            Dim getParams As New Dictionary(Of String, String) From {
                {"page", "1"},
                {"size", "10"},
                {"keyword", "vb.net_test"}
            }
            Dim getResponse As String = Await HttpHelper.SendGetRequestAsync(getUrl, getParams)
            Console.WriteLine("GET请求响应结果:" & vbCrLf & getResponse)

            Console.WriteLine("------------------------")

            ' ------------------- 测试POST请求 -------------------
            Console.WriteLine("=== 开始执行POST请求 ===")
            Dim postUrl As String = "https://api.example.com/user/login" ' 替换为实际接口地址
            ' 匿名类型请求体(也可替换为自定义实体类)
            Dim postData = New With {
                .username = "vbnet_admin",
                .password = "123456_test",
                .rememberMe = True
            }
            Dim postResponse As String = Await HttpHelper.SendPostJsonRequestAsync(postUrl, postData)
            Console.WriteLine("POST请求响应结果:" & vbCrLf & postResponse)

        Catch ex As Exception
            Console.WriteLine($"请求异常:{ex.Message}")
            If ex.InnerException IsNot Nothing Then
                Console.WriteLine($"内部异常详情:{ex.InnerException.Message}")
            End If
        End Try
    End Function
End Module

本工具支持 API 接口的实时请求测试,实时返回接口响应结果,助力开发者快速排查接口问题。
⚠️ 本工具为真实请求,将消耗额度 / 产生计费,请勿填写私密信息。
⚠️ 本页面工具将自动添加请求头,无需手动添加。
请求参数
参数名 参数值 操作

用户反馈

近期反馈0
未登录

登录 后反馈

仅需三步即可快速接入

1
注册认证 · 获取密钥

注册开发者账号并完成实名认证,在 控制台 申请专属API密钥(支持多种安全认证策略)。

2
接口调试 · 开发集成

使用平台 在线调试工具 快速验证接口,通过官方API文档完成业务系统的接口集成与联调。

3
生产上线 · 监控运维

在生产环境调用接口,然后在 个人中心 查看调用日志、平台提供弹性配额与故障排查支持。