HTTP 服務(wù)器響應(yīng)診斷工具 我喜歡 cURL,。各地的系統(tǒng)工程師,、開發(fā)人員、管理員,、QA 工程師和 Web 操作專家都使用 curl 工具來幫助對 Web 服務(wù)器響應(yīng)進(jìn)行故障排除,。它可以快速查看從Web服務(wù)器發(fā)送到瀏覽器的確切內(nèi)容。 在下班回家的路上,,我開始想,,如果我拿著的小型電腦,我的iPhone,,有一個簡單易用的應(yīng)用程序,,如curl來做同樣的故障排除,那該有多方便,。我一直想寫自己的iPhone應(yīng)用程序,,所以我開始研究如何做到這一點(diǎn)。 我的 Xcode Adventure 我第一次在我的Snow Leopard配備的MacBook Pro上啟動了Xcode,。我在SafariOnline上找到了一些很棒的iOS開發(fā)書籍,,并開始學(xué)習(xí)Objective-C。幾章后,,我開始離開頁面,,添加視圖和控制器。我想將我的測試應(yīng)用程序部署到我的iPhone上,,這樣我就需要注冊成為Apple開發(fā)人員(和100美元,!我很快發(fā)現(xiàn)我的Xcode版本太過時了,無法與我的iOS 6.1設(shè)備配合使用,,所以我試圖升級,,卻發(fā)現(xiàn)我需要升級我的操作系統(tǒng)?,F(xiàn)在到了Xcode 4.6,,突然間我的項(xiàng)目在我的iPhone和iPad上運(yùn)行。 我的圖書館冒險 我發(fā)現(xiàn)了NSURL類,,并開始嘗試從Web服務(wù)器獲取原始響應(yīng)以顯示到文本視圖,。它太消化了,需要花費(fèi)很多精力來模擬原始的卷曲會話,。我開始研究NSStream類時,,一位朋友建議我研究一個針對ARM處理器的libcurl(來自Daniel Stenberg的cURL庫)的預(yù)編譯版本。相反,,我發(fā)現(xiàn)了Nick Zitzmann的一篇很棒的文章,,他展示了他如何編譯libcurl,,甚至提供了一個二進(jìn)制文件:http://seiryu.home./~seiryu/libcurl-ios.html 我設(shè)法讓最新版本的libcurl進(jìn)行編譯,并且還包含Apple SecureTransport庫(在libcurl config中帶有darwinsll): #!/bin/bash 我將libcurl.a庫添加到我的Xcode項(xiàng)目中,,并開始通過CURLcode curl_easy_perform(CURL * handle)使用簡單的接口API,。iCurlHTTP的實(shí)時感覺來自于使用CURLOPT_WRITEFUNCTION選項(xiàng)將實(shí)時代碼推送到呈現(xiàn)到textview對象的視圖控制器方法中。它需要定期讓線程將時間讓給主RunLoop(通過向NSRunLoop發(fā)送消息),,以便允許顯示呈現(xiàn)和響應(yīng)用戶事件,。 iCurlHTTP v1.0 Born iCurlHTTP誕生了。這是一個簡單易用的iOS應(yīng)用程序,,允許您運(yùn)行簡單的cURL,,如測試,模擬不同的Web瀏覽器以從Web服務(wù)器檢索原始HTTP標(biāo)頭和HTML響應(yīng),。 OpenSSL 有人嗎,?iCurlHTTP v1.1 SecureTransport庫工作得很好,但提供的SSL連接細(xì)節(jié)比我習(xí)慣于使用curl看到的細(xì)節(jié)要少,。我想要更多的x509解碼信息,,特別是有關(guān)到期日期的SSL證書詳細(xì)信息。OpenSSL庫將允許這樣做,,所以我開始再次搜索以獲取ARM7的OpenSSL庫,。為了得到我想要的東西,我把OpenSSL和libcurl交叉編譯在一起,。有了這個,,我能夠在輸出中獲得很好的openssl細(xì)節(jié),包括證書信息: 我設(shè)法為armv7,,armv7s和i386架構(gòu)分別交叉編譯libcurl和opensl,,但后來發(fā)現(xiàn)了一個由Miyabi Kazamatsuri創(chuàng)建的很棒的GitHub項(xiàng)目腳本,可以做到這兩點(diǎn),。我分叉了他的代碼并更新了它,,使其與Xcode 5(iPhoneOS和iPhoneSimulator的clang)一起使用,并添加了64位arm64和x86_64架構(gòu),。該腳本可在我的 GitHub 上找到:https://github.com/jasonacox/cURL-SSL-for-iOS 更新:我后來為opensl + libcurl編寫了一個更好的構(gòu)建腳本,,該腳本為Mac,iOS和tvOS(Apple TV)目標(biāo)創(chuàng)建庫:https://github.com/jasonacox/Build-OpenSSL-cURL HTTP Timing 和 iOS 7 支持已添加到 iCurlHTTP v1.2 Curl 能夠?yàn)?DNS 查找,、TCP 連接,、SSL 握手、第一個字節(jié)和總時間提供計(jì)時數(shù)據(jù),。例如,。。,。 curl -k -s -o /dev/null -w '%{time_namelookup} %{time_connect} %{time_appconnect} %{time_pretransfer} %{time_redirect} %{time_starttransfer} %{time_total}n' https:// 我想將其添加到iCurlHTTP中,,以便為這些數(shù)字提供移動視角,。在 v1.2 中,我在詳細(xì)信息響應(yīng)視圖中添加了此內(nèi)容,,并將其作為按 UI 底部列出的計(jì)時數(shù)據(jù)點(diǎn)添加,。 v1.2版本還包括iOS 7 SDK更新和新的極簡主義UI外觀。 iCurlHTTP 1.3 愿望清單 多虧了很好的反饋,,我從iCurlHTTP用戶群中捕獲了幾個功能請求,,這些請求成為1.3版本的目標(biāo):
這意味著我需要能夠有一個“用戶設(shè)置”彈出屏幕,,以允許用戶輸入標(biāo)題和帖子的自定義字段,。我還想允許將來能夠擁有自定義用戶代理,http身份驗(yàn)證(用戶/密碼),,SSL選項(xiàng)以及可能的其他選項(xiàng),。 我知道我想要一個基于表格的表單,以允許格式化,,滾動和自動定位,。我考慮使用設(shè)置包,但我需要多行UITextView輸入(特別是對于自定義標(biāo)頭),。有幾個很棒的開源解決方案,,但我最喜歡的版本是FXForms,由Nick Lockwood(https://github.com/jasonacox/FXForms)編寫,。我使用了一個簡單的plist來表示設(shè)置持久性,。 版本 1.3 中添加了以下功能:
iCurlHTTP 1.4 增強(qiáng)的歷史記錄 1.4 更新的目標(biāo)是通過添加 HEADER 和 POST 數(shù)據(jù)來增強(qiáng) URL 下拉列表歷史記錄,,以便于重復(fù)測試,。我使用簡單的(h)和(p)符號分別表示標(biāo)題和帖子: iCurlHTTP 1.5 Redirect 我有幾個請求添加“跟隨重定向”功能(類似于curl -L命令),,以使用戶更容易測試。我不希望這是純粹的自動,,因?yàn)樗鼤茐腸URL提供的粒度細(xì)節(jié)的目的,,因此當(dāng)收到301或302重定向響應(yīng)時,,我會向用戶顯示一個彈出對話框,并列出他們可以遵循的重定向URL,。在此版本中,,我還將丑陋的文本“用戶”(設(shè)置)和“共享”按鈕替換為眾所周知的圖標(biāo),以幫助使其更加直觀,。 我對這個小而簡單的項(xiàng)目如何繼續(xù)增長感到驚訝(無論是在用戶中還是在功能請求中),。這是一次有趣的冒險!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),,我已經(jīng)在github上發(fā)布了一個構(gòu)建腳本:https://github.com/jasonacox/Build-OpenSSL-cURL 由于用戶的要求,我添加了以下功能:
iCurlHTTP 1.8 和 1.9 – 性能改進(jìn)
謝謝,! 感謝您的大力反饋和支持!我真的很感激客氣話和批評性建議,。請發(fā)送更多,! iCurlHTTP 網(wǎng)站: www./icurlhttp
參考和感謝!
|
|