分享

iCurlHTTP – 适用于 iPhone 和 iPad 的 cURL – The Book of Jason

 jerry_tom123 2022-05-25 发布于北京

iCurlHTTP

HTTP 服务器响应诊断工具

我喜欢 cURL。各地的系统工程师、开发人员、管理员、QA 工程师和 Web 操作专家都使用 curl 工具来帮助对 Web 服务器响应进行故障排除。它可以快速查看从Web服务器发送到浏览器的确切内容。

在下班回家的路上,我开始想,如果我拿着的小型电脑,我的iPhone,有一个简单易用的应用程序,如curl来做同样的故障排除,那该有多方便。我一直想写自己的iPhone应用程序,所以我开始研究如何做到这一点。

我的 Xcode Adventure

我第一次在我的Snow Leopard配备的MacBook Pro上启动了Xcode。我在SafariOnline上找到了一些很棒的iOS开发书籍,并开始学习Objective-C。几章后,我开始离开页面,添加视图和控制器。我想将我的测试应用程序部署到我的iPhone上,这样我就需要注册成为Apple开发人员(和100美元!我很快发现我的Xcode版本太过时了,无法与我的iOS 6.1设备配合使用,所以我试图升级,却发现我需要升级我的操作系统。现在到了Xcode 4.6,突然间我的项目在我的iPhone和iPad上运行。

我的图书馆冒险

我发现了NSURL类,并开始尝试从Web服务器获取原始响应以显示到文本视图。它太消化了,需要花费很多精力来模拟原始的卷曲会话。我开始研究NSStream类时,一位朋友建议我研究一个针对ARM处理器的libcurl(来自Daniel Stenberg的cURL库)的预编译版本。相反,我发现了Nick Zitzmann的一篇很棒的文章,他展示了他如何编译libcurl,甚至提供了一个二进制文件:http://seiryu.home./~seiryu/libcurl-ios.html

我设法让最新版本的libcurl进行编译,并且还包含Apple SecureTransport库(在libcurl config中带有darwinsll):

#!/bin/bash
cd curl-7.29.0
export IPHONEOS_DEPLOYMENT_TARGET="4.3"
export CC="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-gcc-4.2"
export CFLAGS="-arch armv7 -arch armv7s -pipe -Os -gdwarf-2 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk"
export LDFLAGS="-arch armv7 -arch armv7s -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk"
./configure --disable-shared --enable-static --with-darwinssl --disable-dependency-tracking --host="armv7-apple-darwin" --prefix=~/Code/curl/device
make -j `sysctl -n hw.logicalcpu_max`
make install

我将libcurl.a库添加到我的Xcode项目中,并开始通过CURLcode curl_easy_perform(CURL * handle)使用简单的接口API。iCurlHTTP的实时感觉来自于使用CURLOPT_WRITEFUNCTION选项将实时代码推送到呈现到textview对象的视图控制器方法中。它需要定期让线程将时间让给主RunLoop(通过向NSRunLoop发送消息),以便允许显示呈现和响应用户事件。

iCurlHTTP v1.0 Born

iCurlHTTP诞生了。这是一个简单易用的iOS应用程序,允许您运行简单的cURL,如测试,模拟不同的Web浏览器以从Web服务器检索原始HTTP标头和HTML响应。

icurlhttp-v1.0

OpenSSL 有人吗?iCurlHTTP v1.1

SecureTransport库工作得很好,但提供的SSL连接细节比我习惯于使用curl看到的细节要少。我想要更多的x509解码信息,特别是有关到期日期的SSL证书详细信息。OpenSSL库将允许这样做,所以我开始再次搜索以获取ARM7的OpenSSL库。为了得到我想要的东西,我把OpenSSL和libcurl交叉编译在一起。有了这个,我能够在输出中获得很好的openssl细节,包括证书信息:

icurlhttp-cert

我设法为armv7,armv7s和i386架构分别交叉编译libcurl和opensl,但后来发现了一个由Miyabi Kazamatsuri创建的很棒的GitHub项目脚本,可以做到这两点。我分叉了他的代码并更新了它,使其与Xcode 5(iPhoneOS和iPhoneSimulator的clang)一起使用,并添加了64位arm64和x86_64架构。该脚本可在我的 GitHub 上找到:https://github.com/jasonacox/cURL-SSL-for-iOS

更新:我后来为opensl + libcurl编写了一个更好的构建脚本,该脚本为Mac,iOS和tvOS(Apple TV)目标创建库:https://github.com/jasonacox/Build-OpenSSL-cURL

HTTP Timing 和 iOS 7 支持已添加到 iCurlHTTP v1.2

Curl 能够为 DNS 查找、TCP 连接、SSL 握手、第一个字节和总时间提供计时数据。例如。。。

curl -k -s -o /dev/null -w '%{time_namelookup} %{time_connect} %{time_appconnect} %{time_pretransfer} %{time_redirect} %{time_starttransfer} %{time_total}n' https://

我想将其添加到iCurlHTTP中,以便为这些数字提供移动视角。在 v1.2 中,我在详细信息响应视图中添加了此内容,并将其作为按 UI 底部列出的计时数据点添加。

icurlhttp-timing3

v1.2版本还包括iOS 7 SDK更新和新的极简主义UI外观。

iCurlHTTP 1.3 愿望清单

多亏了很好的反馈,我从iCurlHTTP用户群中捕获了几个功能请求,这些请求成为1.3版本的目标:

  1. 自定义标头 – 允许通过自定义选项进行更多自定义浏览器仿真。
  2. 打印,复制或电子邮件输出 - 添加一键式功能以将输出发送到剪贴板,打印机,电子邮件,帖子等。
  3. 自定义帖子 – 允许自定义帖子数据模拟 POST 表单提交。

这意味着我需要能够有一个“用户设置”弹出屏幕,以允许用户输入标题和帖子的自定义字段。我还想允许将来能够拥有自定义用户代理,http身份验证(用户/密码),SSL选项以及可能的其他选项。

我知道我想要一个基于表格的表单,以允许格式化,滚动和自动定位。我考虑使用设置包,但我需要多行UITextView输入(特别是对于自定义标头)。有几个很棒的开源解决方案,但我最喜欢的版本是FXForms,由Nick Lockwood(https://github.com/jasonacox/FXForms)编写。我使用了一个简单的plist来表示设置持久性。

icurlhttp-settings

版本 1.3 中添加了以下功能:

  • 共享功能 – 将输出发送到剪贴板、打印机和电子邮件
  • 用户设置 – 设置自定义用户代理、自定义标头(替换默认值或添加新标头)、POST 数据、身份验证和 SSL 模式选择
  • 更新 – 新的 libcurl 和 openssl 库。

iCurlHTTP 1.4 增强的历史记录

1.4 更新的目标是通过添加 HEADER 和 POST 数据来增强 URL 下拉列表历史记录,以便于重复测试。我使用简单的(h)和(p)符号分别表示标题和帖子:

屏幕截图 2016-03-05 在 8.53.39 上午

iCurlHTTP 1.5 Redirect

我有几个请求添加“跟随重定向”功能(类似于curl -L命令),以使用户更容易测试。我不希望这是纯粹的自动,因为它会破坏cURL提供的粒度细节的目的,因此当收到301或302重定向响应时,我会向用户显示一个弹出对话框,并列出他们可以遵循的重定向URL。在此版本中,我还将丑陋的文本“用户”(设置)和“共享”按钮替换为众所周知的图标,以帮助使其更加直观。

屏幕截图 2016-03-05 在 9.30.53 上午

我对这个小而简单的项目如何继续增长感到惊讶(无论是在用户中还是在功能请求中)。这是一次有趣的冒险!iCurlHTTP是用Objective-C编写的,但我肯定会推荐尝试Swift。我正在将iCurlHTTP移植到Apple TV(看起来很荒谬,我知道,但我必须这样做只是为了好玩),并希望尝试一下Swift。

iCurlHTTP 1.6 & 1.7 – HTTP/2.0 和 IPv6 Update

对于那些想要libcurl,openssl和nghttp2(HTTP2)库的iOS或tvOS(AppleTV),我已经在github上发布了一个构建脚本:https://github.com/jasonacox/Build-OpenSSL-cURL

由于用户的要求,我添加了以下功能:

  • HTTPS 会话的证书链详细信息(详细信息模式)
  • 支持 URL 中的身份验证凭据(例如 https://user:pass@/gettest.php)
  • 用于手动地址解析的DNS解析欺骗选项(例如。主机:端口:地址)

iCurlHTTP 1.8 和 1.9 – 性能改进

  • 性能改进和报告的错误修复
  • 添加了用户定义的 DNS 查找和连接超时设置(默认 5 秒)

谢谢!

感谢您的大力反馈和支持!我真的很感激客气话和批评性建议。请发送更多!

iCurlHTTP 网站: www./icurlhttp

在应用商店下载

 

参考和感谢!

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多