联通彩E接入问题备忘

首先要实现的是SSO接口,重点是加密。参考csdn上的文章,很快就可以了,

注意的是在3DES后再用Base编码回产生多余的回车换行,去掉他们再URLEncoder

写加密的时候顺便把解密也写了,等会push的时候要用来取TaskID

然后是push了,push的流程是sp->联通->亚信,其中联通只是验证包头部分。然后把包体提交给亚信。

如果包体格式不对的话,push返回错误代码也是0,但是手机收不到信息。

包头的加密就用SSO中现成的,包体用MimeMessage构造。这个是javamail的一个类。

连接用HttpURLConnection,

  public void connectUrl(String strUrl)
  {
    try
    {
      url = new URL("http", "pushservice.uni-wise.com", 80,
      "/imappushsubmit.aspx");
      hconn = (HttpURLConnection) url.openConnection();
      hconn.setRequestMethod("POST");
      hconn.setDoOutput(true);
      hconn.setDoInput(true);
    }
    catch (Exception ex)
    {
      System.out.println(ex);
    }
  }

构建包体

  private void setMimeMessage()
  {
    try
    {
      Properties props = new Properties();
      ServerIP = "smtp.sina.com.cn";
      System.out.println(ServerIP);
      props.put("mail.smtp.host", ServerIP);
      Session session = Session.getInstance(props, null);
      session.setDebug(true);
      mime = new MimeMessage(session);
      mime.setFrom(new InternetAddress("cheng_shiyong@yahoo.com.cn",new String(strFrom.getBytes("ISO8859_1"),"GB2312"),"GB2312"));
      mime.addRecipient(javax.mail.Message.RecipientType.TO,
   new InternetAddress(strTo));
      mime.setSubject(new String(strSubject.getBytes("ISO8859_1"),"GB2312"), "GB2312");
      mime.setSentDate(new java.util.Date());
      mime.setContent(getMimeMultipart());
    }
    catch (Exception ex)
    {
      System.out.println("MME.Push.setMimeMessage Error" + ex);
    }
  }

  private MimeMultipart getMimeMultipart()
  {
    MimeMultipart mimeMultipart = new MimeMultipart();
    MimeBodyPart mimeBodyPart = new MimeBodyPart();
    try
    {
      mimeBodyPart.setText(new String(mimeBodyText.getBytes("ISO8859_1"),"GB2312"), "GB2312");
      mimeMultipart.addBodyPart(mimeBodyPart);
      Vector filePathes = getFilePaths();
      for (int i = 0; i < filePathes.size(); i++)
      {
 String filePath = (String) filePathes.get(i);
 javax.activation.DataSource datasource = new javax.activation.
     FileDataSource(filePath);
 MimeBodyPart mimeFile = new MimeBodyPart();

 mimeFile.setHeader("Content-Transfer-Encoding", "base64");
 mimeFile.setDataHandler(new javax.activation.DataHandler(datasource));
 mimeFile.setFileName( (new File(filePath)).getName());
 mimeMultipart.addBodyPart(mimeFile);
      }
    }
    catch (Exception e)
    {
      System.out.println("MME.Push.getMimeMultipart Error" + e);
    }
    return mimeMultipart;
  }

发送信息用

MimeMessage.writeTo(hconn.getOutputStream());

读取联通返回信息

      BufferedReader rd = new BufferedReader(new InputStreamReader(hconn.
   getInputStream()));
      for (String line = null; (line = rd.readLine()) != null; )
      {

        sb.append(line);
      }

中间遇到过jaf 报不支持 multipart/mixed类型的错误。造成这个错误的原因是同时有多个mail包存在在系统里面,解决方式是把jaf和mail两个包都放在WEB-INF/lib下面。删除掉其他地方的副本。

另外联通返回的包里面的错误代码是10进制的,要转换成16进制的才能在错误表里面查到

只是自己备忘,写的很乱。呵呵

在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
最长公共子序列(Longest Common Subsequence,简称LCS)问题是一种经典的动态规划问题,用于寻找两个序列中最长的共同子序列的长度。 备忘录法是解决动态规划问题的一种常用方法,它通过记录已经计算过的子问题的结果,避免重复计算,提高算法效率。 在使用备忘录法解决LCS问题时,可以使用一个二维数组作为备忘录,记录已经计算过的子问题的结果。具体步骤如下: 1. 初始化备忘录数组memo,大小为(len1+1)×(len2+1),其中len1和len2分别为两个序列的长度。 2. 对于备忘录数组的第一行和第一列,将其所有元素初始化为0,表示空序列与任意序列的最长公共子序列长度为0。 3. 从第二行和第二列开始,遍历两个序列的每个字符: - 如果当前字符相等,则将备忘录数组中对应位置的值设置为左上角元素加1。 - 如果当前字符不相等,则将备忘录数组中对应位置的值设置为左方和上方元素中的较大值。 4. 遍历完整个备忘录数组后,备忘录数组的右下角元素即为两个序列的最长公共子序列的长度。 下面是一个使用备忘录法解决LCS问题的示例备忘录C的代码: ```python def lcs_memoization(text1, text2): len1, len2 = len(text1), len(text2) memo = [ * (len2 + 1) for _ in range(len1 + 1)] def dp(i, j): if i == 0 or j == 0: return 0 if memo[i][j] != 0: return memo[i][j] if text1[i - 1] == text2[j - 1]: memo[i][j] = dp(i - 1, j - 1) + 1 else: memo[i][j] = max(dp(i - 1, j), dp(i, j - 1)) return memo[i][j] return dp(len1, len2) text1 = "ABCBDAB" text2 = "BDCAB" result = lcs_memoization(text1, text2) print("最长公共子序列的长度为:", result) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值