zoukankan      html  css  js  c++  java
  • Cygwin 版本的 Curl 安装,提取,使用笔记

     Cygwin 版本的 Curl 安装,提取,使用笔记

    Cygwin 版本的 Curl 安装,提取,使用笔记

    Cygwin 版本的 Curl 使其恢复 HTTPS 请求功能

    假如仅把依赖的DLL复制出来,正常HTTP请求是没问题的.也能正确上传中文到PHP服务器不乱码. 
    但是无法正确访问HTTPS服务器.提示以下错误:

    >curl https://baidu.com
    curl: (77) error setting certificate verify locations:
    CAfile: /etc/pki/tls/certs/ca-bundle.crt
    CApath: none

    于是使用排除法一个文件夹一个文件夹的排除,删除.最终确定了一下文件夹结构及其文件是必须的:

    ├─bin
    curl.exe
    cygcom_err-2.dll
    cygcrypto-1.0.0.dll
    cygcurl-4.dll
    cygexpat-1.dll
    cyggcc_s-seh-1.dll
    cyggssapi_krb5-2.dll
    cygiconv-2.dll
    cygidn-11.dll
    cygintl-8.dll
    cygk5crypto-3.dll
    cygkrb5-3.dll
    cygkrb5support-0.dll
    cyglber-2-4-2.dll
    cygldap-2-4-2.dll
    cygmetalink-3.dll
    cygnghttp2-14.dll
    cygpsl-5.dll
    cygsasl2-3.dll
    cygssh2-1.dll
    cygssl-1.0.0.dll
    cygunistring-2.dll
    cygwin1.dll
    cygz.dll
    ├─etc
    └─pki
    ├─ca-trust
    └─extracted
    └─pem
    tls-ca-bundle.pem
    └─tls
    cert.pem(必须是系统属性 attrib +s)
    certs(必须是系统属性 attrib +s)
    └─usr
    └─ssl
    └─certs
    ca-bundle.crt(必须是系统属性 attrib +s)
    ca-bundle.trust.crt(必须是系统属性 attrib +s)

    Cygwin 版本的 Curl 依赖的 DLL 清单

    1. cygcom_err-2.dll
    2. cygcrypto-1.0.0.dll
    3. cygcurl-4.dll
    4. cygexpat-1.dll
    5. cyggcc_s-seh-1.dll
    6. cyggssapi_krb5-2.dll
    7. cygiconv-2.dll
    8. cygidn-11.dll
    9. cygintl-8.dll
    10. cygk5crypto-3.dll
    11. cygkrb5-3.dll
    12. cygkrb5support-0.dll
    13. cyglber-2-4-2.dll
    14. cygldap-2-4-2.dll
    15. cygmetalink-3.dll
    16. cygnghttp2-14.dll
    17. cygpsl-5.dll
    18. cygsasl2-3.dll
    19. cygssh2-1.dll
    20. cygssl-1.0.0.dll
    21. cygunistring-2.dll
    22. cygwin1.dll
    23. cygz.dll

    提取 Cygwin 版本的 Curl 工具

    提取方法1(笨办法)

    1. 把 cygwin64in 目录里的 curl.exe 复制到 新文件夹.
    2. 在 新文件夹 运行 curl ,此时会提示缺少 XXX.dll ,然后把缺少的 dll 复制到新文件夹.
    3. 循环 步骤2 直到能正常运行 curl 为止.

    提取方法2(推荐方法)

    1. 下载软件 Dependency Walker
    2. 用该软件打开 curl 程序
    3. 再 File - Save As - 保存类型 - .txt
    4. 用 高级文本编辑器 打开保存的文本
    5. 提取所有在 cygwin64in 目录的DLL 路径字符串
    6. 用 Excel软件 把重复的 路径字符串 清除掉.
    7. 再在 高级文本编辑器 里在 所有 路径字符串 前面加上 COPY /Y 字符串 并全部复制
    8. 再在 新文件夹 里空白处 按住 Shift 打开 右键菜单 - 在此处打开命令窗口
    9. 粘帖 - Enter - 搞定所有DLL!

    精简 Cygwin

    可精简工具包列表(个人笔记)

    1. gawk: GNU awk, a pattern scanning and processing language
    2. groff: GNU roff formatter
    3. libdb5.3: Oracle Berkeley D (runtime)

    手动卸载工具包步骤

    鉴于使用setup工具无法正常卸载某些工具包(如某些核心工具包),于是只好手动删除相关文件来卸载了. 
    此步骤要能脚本化才方便.否则要删除文件多的话,手工比对非常麻烦. 
    初期可用 BeyondCompare 软件的文件夹比对功能来删除.

    1. 进入 缓存文件夹(Local Package Directory) 
      如: 缓存文件夹网址x86_64 elease
    2. 找到需要卸载的工具包 
      如: gawkgawk-4.1.4-1.tar.xz
    3. 根据.tar.xz包里的文件夹结构,去删除 Cygwin安装文件夹(Root Directory)对应的文件即可.

    正常卸载工具包步骤

    1. 参照 安装 Cygwin 工具包 步骤 到达 Select Packages 步骤
    2. 单击待精简工具包New状态 Keep 为 Uninstall 即可卸载.

    安装 Cygwin 工具包 步骤

    1.本地检索 工具包

    理论上 使用 Install From Local Directory 也是可行的,因为记录所有可安装的工具数据库文件 setup.ini已经下载完毕.但是实际使用时却无法正确读取出可安装的列表供检索.只能走在线检索了.

    经过摸索,终于发现可以直接本地检索的方法了!

    1. 和 “安装 Cygwin 步骤” 一样
    2. 但是选择 Install From Local Directory
    3. 到达 Select Packages 步骤
    4. 此时选择 View 为 Full
    5. 然后回退到上一步
    6. 再进入 Select Packages 步骤
    7. 此时就发现滚动条明显变长了.说明成功列举出所有可供安装的工具包列表了.

    猜测是 setup 的一个Bug? 或者是一个未声明的”优化”,第一遍只显示”已安装的工具包”,第二遍才显示所有可供安装的工具包列表?

    2.在线检索 工具包

    1. 打开 setup-x86_64.exe
    2. 和 “安装 Cygwin 步骤” 一样到达 Select Packages 步骤
    3. 检索 想要安装的工具名称 即可.

    安装 Cygwin 步骤

      1. 打开官网 安装指南 界面
      2. 下载最新安装包 setup-x86_64.exe
      3. 打开 Cygwin下载镜像列表网站 选择最近的国家. 
        如中国的:http://mirrors.ustc.edu.cn/cygwin/http://mirrors.neusoft.edu.cn/cygwin/
      4. 选择 Install From Internet
      5. 在 Cygwin Setup - Choose Download Site 时 添加选择的镜像网址.
      6. 在 Cygwin Setup - Select Packages 时 先不选择任何包
      7. 即可得到一个干净的单纯的 Cygwin 环境了.
    作者:Asion Tang
    凡是没有注明[转载]的文章,本Blog发表的文章版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    成为明星程序员的10个提示
    每天写出好代码的5个建议
    收集开发相关网站
    Class.getDeclaredFields()和Class.getFields()的区别。 Class.getMethods()和Class.getDeclaredMethods()的区别。
    Oracle数据库插入过程中特殊符号
    @JsonIgnore注解|@JsonProperty
    基本linux命令
    linux基本概述
    php.ini模块
    一个购物车类(session实现的且为单例模式)
  • 原文地址:https://www.cnblogs.com/AsionTang/p/6008449.html
Copyright © 2011-2022 走看看