首页 文章 精选 留言 我的

精选列表

搜索[镜像无法拉取],共10000篇文章
优秀的个人博客,低调大师

电商企业在线预约快递件接口API对接demo

(1)支持自定义预约时间,不遗漏订单(2)已支持三通一达(申通不支持)、顺丰、EMS、宅急送、德邦、优速等物流公司(3)快递公司会在两小时内联系发件人并上门揽件(4)接口支持的消息接收方式为HTTP POST,请求方法的编码格式(utf-8):“application/x-www-form-urlencoded;charset=utf-8”。(5)PC端,移动端均能对接使用(6)接口使用:在快递鸟网站申请接口KEY 一、示例请求示例 JSON { "OrderCode": "012657018199", "ShipperCode": "SF", "PayType": 1, "MonthCode": "7553045845", "ExpType": 1, "Cost": 1.0, "OtherCost": 1.0, "Sender": { "Company": "LV", "Name": "Taylor", "Mobile": "15018442396", "ProvinceName": "上海", "CityName": "上海", "ExpAreaName": "青浦区", "Address": "明珠路" }, "Receiver": { "Company": "GCCUI", "Name": "Yann", "Mobile": "15018442396", "ProvinceName": "北京", "CityName": "北京", "ExpAreaName": "朝阳区", "Address": "三里屯街道" }, "Commodity": [ { "GoodsName": "鞋子", "Goodsquantity": 1, "GoodsWeight": 1.0 } ], "AddService": [ { "Name": "COD", "Value": "1020" } ], "Weight": 1.0, "Quantity": 1, "Volume": 0.0, "Remark": "小心轻放" } 返回示例 JSON失败: { "EBusinessID": "1237100", "Success": false, "ResultCode": "105", "Reason": "该订单已经存在,请勿重复操作", "UniquerRequestNumber":"451d3c7c-b428-490a-a4ed-e368f15f6c74" } 成功: { "EBusinessID": "1237100", "Success": true, "Order": { "OrderCode": "012657018199", " ShipperCode ": " SF ", " LogisticCode ": "" }, "ResultCode": "100", "Reason": "" } 三、demoJAVA对接 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; import java.security.MessageDigest; public class KdGoldAPIDemo { //电商ID private String EBusinessID="请申请"; //电商加密私钥,注意保管,不要泄漏 private String AppKey="请申请"; //测试请求url private string ReqURL = "http://testapi.kdniao.cc:8081/api/oorderservice"; //正式请求url //private string ReqURL = "http://api.kdniao.cc/api/OOrderService"; /** * Json方式 在线下单 * @throws Exception */ public String orderOnlineByJson() throws Exception{ String requestData= "{'OrderCode': '012657700312'," + "'ShipperCode':'YTO'," + "'PayType':1," + "'ExpType':1," + "'Cost':1.0," + "'OtherCost':1.0," + "'Sender':" + "{" + "'Company':'LV','Name':'Taylor','Mobile':'15018442396','ProvinceName':'上海','CityName':'上海','ExpAreaName':'青浦区','Address':'明珠路73号'}," + "'Receiver':" + "{" + "'Company':'GCCUI','Name':'Yann','Mobile':'15018442396','ProvinceName':'北京','CityName':'北京','ExpAreaName':'朝阳区','Address':'三里屯街道雅秀大厦'}," + "'Commodity':" + "[{" + "'GoodsName':'鞋子','Goodsquantity':1,'GoodsWeight':1.0}]," + "'AddService':" + "[{" + "'Name':'COD','Value':'1020'}]," + "'Weight':1.0," + "'Quantity':1," + "'Volume':0.0," + "'Remark':'小心轻放'," + "'Commodity':" + "[{" + "'GoodsName':'鞋子'," + "'Goodsquantity':1," + "'GoodsWeight':1.0}]" + "}"; Map<String, String> params = new HashMap<String, String>(); params.put("RequestData", urlEncoder(requestData, "UTF-8")); params.put("EBusinessID", EBusinessID); params.put("RequestType", "1001"); String dataSign=encrypt(requestData, AppKey, "UTF-8"); params.put("DataSign", urlEncoder(dataSign, "UTF-8")); params.put("DataType", "2"); String result=sendPost(ReqURL, params); //根据公司业务处理返回的信息...... return result; } /** * MD5加密 * @param str 内容 * @param charset 编码方式 * @throws Exception */ @SuppressWarnings("unused") private String MD5(String str, String charset) throws Exception { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(str.getBytes(charset)); byte[] result = md.digest(); StringBuffer sb = new StringBuffer(32); for (int i = 0; i < result.length; i++) { int val = result[i] & 0xff; if (val <= 0xf) { sb.append("0"); } sb.append(Integer.toHexString(val)); } return sb.toString().toLowerCase(); } /** * base64编码 * @param str 内容 * @param charset 编码方式 * @throws UnsupportedEncodingException */ private String base64(String str, String charset) throws UnsupportedEncodingException{ String encoded = Base64.encode(str.getBytes(charset)); return encoded; } @SuppressWarnings("unused") private String urlEncoder(String str, String charset) throws UnsupportedEncodingException{ String result = URLEncoder.encode(str, charset); return result; } /** * 电商Sign签名生成 * @param content 内容 * @param keyValue Appkey * @param charset 编码方式 * @throws UnsupportedEncodingException ,Exception * @return DataSign签名 */ @SuppressWarnings("unused") private String encrypt (String content, String keyValue, String charset) throws UnsupportedEncodingException, Exception { if (keyValue != null) { return base64(MD5(content + keyValue, charset), charset); } return base64(MD5(content, charset), charset); } /** * 向指定 URL 发送POST方法的请求 * @param url 发送请求的 URL * @param params 请求的参数集合 * @return 远程资源的响应结果 */ @SuppressWarnings("unused") private String sendPost(String url, Map<String, String> params) { OutputStreamWriter out = null; BufferedReader in = null; StringBuilder result = new StringBuilder(); try { URL realUrl = new URL(url); HttpURLConnection conn =(HttpURLConnection) realUrl.openConnection(); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // POST方法 conn.setRequestMethod("POST"); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.connect(); // 获取URLConnection对象对应的输出流 out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); // 发送请求参数 if (params != null) { StringBuilder param = new StringBuilder(); for (Map.Entry<String, String> entry : params.entrySet()) { if(param.length()>0){ param.append("&"); } param.append(entry.getKey()); param.append("="); param.append(entry.getValue()); System.out.println(entry.getKey()+":"+entry.getValue()); } System.out.println("param:"+param.toString()); out.write(param.toString()); } // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream(), "UTF-8")); String line; while ((line = in.readLine()) != null) { result.append(line); } } catch (Exception e) { e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return result.toString(); } }

优秀的个人博客,低调大师

Python网络爬虫(正则, 内涵段子,猫眼电影, 链家爬

正则表达式(re模块): 数据的分类: 结构化数据 有固定的格式 如HTML、XML、JSON 非结构化数据 图片、音频、视频 这类数据一般存储为二进制 正则: 使用流程: 创建编译对象:p = re.compile("正则表达式") 对字符串匹配:r = p.match("字符串") 获取匹配结果:print(r.group()) 常用方法: match(str) 字符串开头的第一个 返回对象 search(str) 从头开始匹配 只匹配一个 返回对象 group() 从mat

优秀的个人博客,低调大师

112期:红包峰会回顾资料来袭(视频+PDF),免费快

本期头条 对于80年代的人来说,网吧这个词都不陌生。那时候电脑还没有普及,学习需要时,我们去网吧下过资料、模拟过考试;任性的时候,也曾去网吧看过电影、玩过游戏;而就算现在,同事下班后,也会偶尔去三三两两开开黑。随着网吧衍变成网咖,环境更好、服务更多、体验更好,上网之外还可以休闲、喝咖啡。然而在大部分人看来,不管是网咖还是网吧,仿佛提供的也就是个上网的服务,但是你或许不知道的是,从你进入网鱼网咖的那一刻,你已经享受的时下最热门的服务——大数据。本期头条将带你走进年服务人次3300万+的网鱼网咖的大数据架构!点我查看。 • 专访佰腾科技大数据团队,谈专利大数据领域的挑战与实践 • 轻松处理每天2TB的日志数据,支撑运营团队进行大数据分析挖掘,随时洞

优秀的个人博客,低调大师

个数据包真麻烦!

网络部新员工 我叫Robert,是Linux帝国一个普通的公民。 今天是我第一天上班的日子,我下了好大功夫才考上了帝国的公务员,根据我的成绩,我被分到了帝国网络部。 一进入帝国的办公园区,我就被眼前的景象惊呆了,一座座高楼大厦,富丽堂皇,鳞次栉比,我忍不住驻足多看了几眼。 这些大楼上面都有招牌,最高的那一座是帝国的进程&线程管理部门的办公大厦,旁边还有内存管理部门、文件管理等部门办公大厦。 网卡驱动部门 我只顾东张西望,不小心跟旁边小路跑出来的一位小哥撞了一个满怀,他手里抱的一堆数据散落的满地都是。 我一边道歉,一边帮他捡起数据。 “这位小哥行色匆匆,不知要去哪里啊”,我好奇的问到。 “哦,你好,我是网卡驱动部门的,这是从网卡那里刚刚拿到的数据包,我得赶紧交给协议栈处理”,说完整理了下数据,就匆忙离开了。 寻着他出来的地方看去,不远处就是他说的网卡驱动部门,难道我办公的地方就在这里?我沿着这条小路走了过去。 一进入网卡驱动部门,出现在眼前的就是一副热火朝天的景象,收包的,解包的,发包的,一群人忙的不亦乐乎。 “这么早就这么忙碌了啊”,我问门口的保安大叔。 “是啊,这平时这个点也没什么网络访问,不知道今天怎么回事,一大早的数据就传输个不停”,保安说到。 我指着里面一个员工问保安:“大叔,那人在干嘛呢?一直在转来转去的” “你说他啊,他在从网卡轮询读取数据包呢!” “轮询?网络数据包不是网卡发中断通知吗,干嘛要去轮询呢?”,我不解的问到。 “以前是这样的,不过后来CPU那边有个叫阿Q的家伙不干了,说网卡数据太频繁,老是打断他们正常的工作。不仅如此,中断响应的时候还得把中断给关了,避免出现错误,时间久了,键盘、鼠标等单位就得不到响应纷纷闹事了”,保安说完点了一支香烟。 我若有所思的点了点头,“那现在就改成轮询了?不过这样好浪费时间哦” 保安吐了一个烟圈,继续说到:“倒也不是全都是轮询,现在把处理过程分成了两段,最开始的第一部分还是靠中断来通知的,这个时候需要关一下中断,不过通知后不会真正处理数据包,而是开启了一个软中断,所以关不了太久时间。第二部分在软中断中去轮询处理的,这个时候就不用关中断了。把硬中断和轮询结合了一下,就不用每个数据包来都中断一次了,也不用关中断太长时间,还给这技术取了个名字叫NAPI” “保安大叔,你怎么什么都知道啊?” “我以前就在里面工作啊,现在年纪稍微大了些,比不上年轻人,就让我来当保安了,唉~”,大叔说完又猛抽了一口香烟,整理了下自己日益稀疏的头发。 “唉,对了,你是谁啊,怎么没见过你?” “我是帝国网络部新来的员工,今天来报道的。我把手中的录取通知书递给了保安” 保安大叔看了看说到:“你走错了,不是这里,你该去网络协议栈大厦”。 协议栈大厦 离开网卡驱动部门,我继续前行终于找到了网络协议栈大厦,这便是我今后工作的地方了。 走近一看,这座网络大厦并不如前面看到的高大,只有三层高,每一层的墙上都挂着一个巨大的招牌,上面写着这一层的名字,从上向下分别是: 应用层 传输层 网络层 大厦的门口还有一个收发室,门牌上写着netif_receive_skb,收发室坐着一位大爷。 正在这时,先前碰到的小哥又来了,将手里的数据放到了收发室就离开了,看来这里就是网络协议栈的入口了。 大爷拆开这个数据包看了看,随即按了下按钮,数据包就顺着管道传到了背后协议栈大厦一楼的一个办公室,我抬头一看,上面写着IPv4。再向旁边看去,还有好几间办公室,分别写了IPv6、ICMP、IGMP、ARP··· 我来到这个IPv4的门口,里面也是忙的不亦乐乎,有分片的、组包的、计算校验和的、有条不紊。 办公室正中央有一个圆柱形的管道,通向了二楼,一楼处理完毕就通过这管道把数据包送了上去。 墙上还有另一个管道,上面写着netfilter hook,不知道是通向了哪里。 “你找谁?”,我正看得入神,里面一个负责人发现了我,我赶紧表明来意。 他看过我手中的录取通知书后说到,“你是在传输层啊,出门右拐上二楼就是了。我们这一楼都是网络层协议的办公室。” 我又看了下手里的录用通知书,这才发现被分配在了传输层工作。 传输层工作 来到二楼,总算见到了我的主管。 “Robert,欢迎加入网络部,工作岗位在传输层的TCP小组,大家欢迎!” “谢谢主管!谢谢大家!” “这是Cerf,你刚来,就让他先带带你,有什么不懂的就向他请教吧。” 我点头感谢,和一旁这个叫Cerf的握了握手。 接下来,主管向我介绍了咱们传输层的几个小组的情况:TCP、UDP、SCTP、UDP-lite······我这才知道,原来传输层不是只有TCP和UDP。 Cerf带我来到了工位,不愧是国有单位,无比宽敞,桌上还有一堆奇怪的设备。 “这是一堆什么东西啊”,我问Cerf。 “这些都是定时器,后面你工作处理TCP连接会用到的” 我点了点头,环顾四周,工位旁边的墙壁上还贴满了什么东西,我凑近了一看,才发现满满的都是RFC几千条的规定。 “好好看,以后的工作可是要天天用到这些东西呢”,Cerf略开玩笑的说着。 “这些我基本都背的下来了,要不然我也考不到这里来”,我笑着说,略带一些得意。 Cerf也笑了笑,“别大意,之前也有人也说过这话,后来还不是走了” 我有些尴尬,不知道说些什么,这时办公室中央的管道里冒出了一个数据包。 “Robert,你刚来,这个新的连接数据包就交给你来处理下,熟悉下工作流程”,主管说到。 我刚刚放松的心情一下紧张了起来,毕竟以前都是纸上谈兵,还从没有真正处理过数据包呢。 我小心翼翼的接过这个数据包,定位到TCP的头部,瞧了一眼标志位,发现SYN位是1,看来是有新的连接到来了,接下来不就是三次握手吗,我再熟悉不过了。 我准备了一个响应包,将SYN标记和ACK标记都点亮后,接下来就犯了难了。这个确认号ACK我倒是知道是对方的序列号+1,不过我回复的序列号该是多少呢?一时之间,不知道如何是好。 你们知道吗?在线等,挺急的。 未完待续······ 彩蛋 CPU一号车间的阿Q又闹脾气了。 “我们花了大量时间把网卡数据搬运到内存,重复又没有技术含量,我受够了!” 预知后事如何,请关注后续精彩······ 往期TOP5文章 CPU明明8个核,网卡为啥拼命折腾一号核? 因为一个跨域请求,我差点丢了饭碗 完了!CPU一味求快出事儿了! 哈希表哪家强?几大编程语言吵起来了! 一个HTTP数据包的奇幻之旅 本文分享自微信公众号 - 编程技术宇宙(xuanyuancoding)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册