Submit Search
Upload
Cocoa勉強会#33-意外に楽に使えるlibcurl
•
1 like
•
4,762 views
Masayuki Nii
Follow
Cocoa勉強会#33 2009/4/11 意外に楽に使えるlibcurl 新居雅行
Read less
Read more
Technology
Report
Share
Report
Share
1 of 14
Download now
Download to read offline
Recommended
C++のビルド高速化について
C++のビルド高速化について
AimingStudy
Cost of ovs receiving process
Cost of ovs receiving process
Takuya ASADA
ParliamentでGeoSPARQL
ParliamentでGeoSPARQL
Teppei Inaba
コマンド一発でLibreOfficeをインストール
コマンド一発でLibreOfficeをインストール
雄介 荒川
Lagopus.confの書式(for lagopus 0.1.x)
Lagopus.confの書式(for lagopus 0.1.x)
Masaru Oki
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
新生Lagopus2017(仮称)
新生Lagopus2017(仮称)
Masaru Oki
Kansai mrb gr_sakura
Kansai mrb gr_sakura
Kosuga Masakatsu
Recommended
C++のビルド高速化について
C++のビルド高速化について
AimingStudy
Cost of ovs receiving process
Cost of ovs receiving process
Takuya ASADA
ParliamentでGeoSPARQL
ParliamentでGeoSPARQL
Teppei Inaba
コマンド一発でLibreOfficeをインストール
コマンド一発でLibreOfficeをインストール
雄介 荒川
Lagopus.confの書式(for lagopus 0.1.x)
Lagopus.confの書式(for lagopus 0.1.x)
Masaru Oki
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
新生Lagopus2017(仮称)
新生Lagopus2017(仮称)
Masaru Oki
Kansai mrb gr_sakura
Kansai mrb gr_sakura
Kosuga Masakatsu
2日間Fabricを触った俺が 色々解説してみる
2日間Fabricを触った俺が 色々解説してみる
airtoxin Ishii
処理概要図&構築手順書1124
処理概要図&構築手順書1124
Kazuki Miura
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
洋史 東平
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
basicinc_dev
PythonでRakeもどきを作ってみた
PythonでRakeもどきを作ってみた
kwatch
CouchDB JP & BigCouch
CouchDB JP & BigCouch
Yohei Sasaki
B lack jumbodog 運転と改造のすすめ
B lack jumbodog 運転と改造のすすめ
Shinichi Hirauchi
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
Shinichi Hirauchi
ぼくの考えた最強のpipeline構成
ぼくの考えた最強のpipeline構成
Naoto Nishizono
Node-v0.12の新機能について
Node-v0.12の新機能について
shigeki_ohtsu
Kubernetesできること
Kubernetesできること
iPride Co., Ltd.
SystemV IPC
SystemV IPC
Masami Ichikawa
これだけMakefile (Basics of makefile)
これだけMakefile (Basics of makefile)
seichi23
Yesod on Heroku
Yesod on Heroku
Takahiro Himura
RPCノード構築方法【Litecoin】
RPCノード構築方法【Litecoin】
qaz_id
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
npsg
Unix
Unix
Hiramatsu Ryosuke
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
Preferred Networks
Openstack calendar20141222
Openstack calendar20141222
samemoon
Yapcasia2012 ltthon
Yapcasia2012 ltthon
turugina
Web技術勉強会23回目
Web技術勉強会23回目
龍一 田中
MackerelAPI使ってみた
MackerelAPI使ってみた
Shugo Numano
More Related Content
What's hot
2日間Fabricを触った俺が 色々解説してみる
2日間Fabricを触った俺が 色々解説してみる
airtoxin Ishii
処理概要図&構築手順書1124
処理概要図&構築手順書1124
Kazuki Miura
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
洋史 東平
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
basicinc_dev
PythonでRakeもどきを作ってみた
PythonでRakeもどきを作ってみた
kwatch
CouchDB JP & BigCouch
CouchDB JP & BigCouch
Yohei Sasaki
B lack jumbodog 運転と改造のすすめ
B lack jumbodog 運転と改造のすすめ
Shinichi Hirauchi
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
Shinichi Hirauchi
ぼくの考えた最強のpipeline構成
ぼくの考えた最強のpipeline構成
Naoto Nishizono
Node-v0.12の新機能について
Node-v0.12の新機能について
shigeki_ohtsu
Kubernetesできること
Kubernetesできること
iPride Co., Ltd.
SystemV IPC
SystemV IPC
Masami Ichikawa
これだけMakefile (Basics of makefile)
これだけMakefile (Basics of makefile)
seichi23
Yesod on Heroku
Yesod on Heroku
Takahiro Himura
RPCノード構築方法【Litecoin】
RPCノード構築方法【Litecoin】
qaz_id
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
npsg
Unix
Unix
Hiramatsu Ryosuke
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
Preferred Networks
Openstack calendar20141222
Openstack calendar20141222
samemoon
Yapcasia2012 ltthon
Yapcasia2012 ltthon
turugina
What's hot
(20)
2日間Fabricを触った俺が 色々解説してみる
2日間Fabricを触った俺が 色々解説してみる
処理概要図&構築手順書1124
処理概要図&構築手順書1124
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
PythonでRakeもどきを作ってみた
PythonでRakeもどきを作ってみた
CouchDB JP & BigCouch
CouchDB JP & BigCouch
B lack jumbodog 運転と改造のすすめ
B lack jumbodog 運転と改造のすすめ
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
ぼくの考えた最強のpipeline構成
ぼくの考えた最強のpipeline構成
Node-v0.12の新機能について
Node-v0.12の新機能について
Kubernetesできること
Kubernetesできること
SystemV IPC
SystemV IPC
これだけMakefile (Basics of makefile)
これだけMakefile (Basics of makefile)
Yesod on Heroku
Yesod on Heroku
RPCノード構築方法【Litecoin】
RPCノード構築方法【Litecoin】
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
Unix
Unix
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
Openstack calendar20141222
Openstack calendar20141222
Yapcasia2012 ltthon
Yapcasia2012 ltthon
Similar to Cocoa勉強会#33-意外に楽に使えるlibcurl
Web技術勉強会23回目
Web技術勉強会23回目
龍一 田中
MackerelAPI使ってみた
MackerelAPI使ってみた
Shugo Numano
Open modeler
Open modeler
Yoshiki Izumi
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
Yoshifumi Kawai
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
洋史 東平
Building production server on docker
Building production server on docker
Hiroshi Miura
Building production server on docker
Building production server on docker
Hiroshi Miura
第2回 松本勉強会 2012 05 25 - apache2.4とmod_lua
第2回 松本勉強会 2012 05 25 - apache2.4とmod_lua
Ryosuke MATSUMOTO
qmake入門
qmake入門
hermit4 Ishida
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Ryo Nakamaru
Mr201304 open flow_security_jpn
Mr201304 open flow_security_jpn
FFRI, Inc.
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Masahiro Nagano
C++ lecture-0
C++ lecture-0
sunaemon
Docker Swarm入門
Docker Swarm入門
Masahito Zembutsu
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Kazuyuki Miyake
Embulk 20150411
Embulk 20150411
Hiroshi Nakamura
フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察
cch-robo
JavaScript入門
JavaScript入門
Ryo Maruyama
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西
Masahide Yamamoto
Google Apps Scirpt勉強会 #1
Google Apps Scirpt勉強会 #1
ikikko
Similar to Cocoa勉強会#33-意外に楽に使えるlibcurl
(20)
Web技術勉強会23回目
Web技術勉強会23回目
MackerelAPI使ってみた
MackerelAPI使ってみた
Open modeler
Open modeler
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Building production server on docker
Building production server on docker
Building production server on docker
Building production server on docker
第2回 松本勉強会 2012 05 25 - apache2.4とmod_lua
第2回 松本勉強会 2012 05 25 - apache2.4とmod_lua
qmake入門
qmake入門
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Mr201304 open flow_security_jpn
Mr201304 open flow_security_jpn
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
C++ lecture-0
C++ lecture-0
Docker Swarm入門
Docker Swarm入門
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Embulk 20150411
Embulk 20150411
フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察
JavaScript入門
JavaScript入門
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西
Google Apps Scirpt勉強会 #1
Google Apps Scirpt勉強会 #1
More from Masayuki Nii
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
Masayuki Nii
トップエスイー勉強会2014第1回-INTER-Mediator
トップエスイー勉強会2014第1回-INTER-Mediator
Masayuki Nii
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Masayuki Nii
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法
Masayuki Nii
Cocoa勉強会#61-メインスレッド外でNSURLConnection
Cocoa勉強会#61-メインスレッド外でNSURLConnection
Masayuki Nii
Cocoa勉強会#23-カスタムシートとModality
Cocoa勉強会#23-カスタムシートとModality
Masayuki Nii
Cocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使う
Masayuki Nii
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Masayuki Nii
Cocoa勉強会#57-Baseによるローカライズまとめ
Cocoa勉強会#57-Baseによるローカライズまとめ
Masayuki Nii
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
Masayuki Nii
Cocoa勉強会#45-AWS SimpleDBを使ってみる
Cocoa勉強会#45-AWS SimpleDBを使ってみる
Masayuki Nii
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Masayuki Nii
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
Masayuki Nii
Cocoa勉強会#27-QuickLookプラグインの作り方
Cocoa勉強会#27-QuickLookプラグインの作り方
Masayuki Nii
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
Masayuki Nii
Cocoa勉強会#37-シェイクイベントの実装
Cocoa勉強会#37-シェイクイベントの実装
Masayuki Nii
Cocoa勉強会#32-表形式のデータに順序を記録する方法
Cocoa勉強会#32-表形式のデータに順序を記録する方法
Masayuki Nii
Cocoa勉強会#35-iPhoneでのコピペとカスタムUI
Cocoa勉強会#35-iPhoneでのコピペとカスタムUI
Masayuki Nii
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
Masayuki Nii
Cocoa勉強会#38-UITableViewテーブル内のナビゲーション
Cocoa勉強会#38-UITableViewテーブル内のナビゲーション
Masayuki Nii
More from Masayuki Nii
(20)
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
トップエスイー勉強会2014第1回-INTER-Mediator
トップエスイー勉強会2014第1回-INTER-Mediator
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法
Cocoa勉強会#61-メインスレッド外でNSURLConnection
Cocoa勉強会#61-メインスレッド外でNSURLConnection
Cocoa勉強会#23-カスタムシートとModality
Cocoa勉強会#23-カスタムシートとModality
Cocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Cocoa勉強会#57-Baseによるローカライズまとめ
Cocoa勉強会#57-Baseによるローカライズまとめ
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
Cocoa勉強会#45-AWS SimpleDBを使ってみる
Cocoa勉強会#45-AWS SimpleDBを使ってみる
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
Cocoa勉強会#27-QuickLookプラグインの作り方
Cocoa勉強会#27-QuickLookプラグインの作り方
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
Cocoa勉強会#37-シェイクイベントの実装
Cocoa勉強会#37-シェイクイベントの実装
Cocoa勉強会#32-表形式のデータに順序を記録する方法
Cocoa勉強会#32-表形式のデータに順序を記録する方法
Cocoa勉強会#35-iPhoneでのコピペとカスタムUI
Cocoa勉強会#35-iPhoneでのコピペとカスタムUI
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
Cocoa勉強会#38-UITableViewテーブル内のナビゲーション
Cocoa勉強会#38-UITableViewテーブル内のナビゲーション
Recently uploaded
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
sugiuralab
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
osamut
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
sugiuralab
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
Atomu Hidaka
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
Shota Ito
Recently uploaded
(8)
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
Cocoa勉強会#33-意外に楽に使えるlibcurl
1.
Cocoa勉強会 #33関東 意外に楽に使えるlibcurl 新居雅行 nii@msyk.net 2009年4月8日水曜日 1
2.
Agenda • • • 2009年4月8日水曜日 curlとlibcurlの紹介 libcurlの使い方 プログラムの実例 2
3.
curlとlibcurlとは • cURL and libcurl • • • •
curlコマンド • • • libcurl • オープンソースの通信ツール Client for URLs or Client for URL Request Library MIT/X derivate license URLを与えて通信処理ができる コマンドは「カール」と発音する curlコマンドの機能をC言語のAPIから利用できる 2009年4月8日水曜日 3
4.
libcurlについて • URLを指定した通信機能を提供 • • • • • • スレッドセーフ、IPv6対応したライブラリ バージョンを重ねてかなりの高機能に ドキュメントが充実している Mac OS Xには標準搭載 APIはC言語だが、さまざまな言語で利用できる • • 2009年4月8日水曜日 オープンソース 例えばPHPやJavaなど CocoaクラスのCURLHANDLE(NSURLHandleのサ ブクラス)もあるが、フルスペックではない 4
5.
プロジェクトでliburlを使う • • プロジェクトにlibcurlへの参照を作る ヘッダには、以下のように記入するのみでOK • 2009年4月8日水曜日 #import <curl/curl.h> 5
6.
libcurlの参照 • • プロジェクトに新しく ファイル加える /usr/libにあるライブラ リを追加 • • 2009年4月8日水曜日 libcurl.4.dylib以外は全部 これへのシンボリックリ ンク いずれも4つのアーキテ クチャをサポート 6
7.
ライブラリの番号とバージョン • libcurl.n.dylibの「n」はライブラリの番号 • • • • • • • libcurl最新版(Mac OS X
10.5.6) • • • libcurlでは、apacheのモジュールの番号で管理 SONAMEとして参照されている libcurl.4.soなどをapacheが利用(Linuxなど) SONAME=1/ libcurl Ver.7.4.2(2000/11)より付ける SONAME=2/ libcurl Ver.7.7 - 2001/3/22 SONAME=3/ libcurl Ver.7.12.0 - 2004/6/12 SONAME=4/ libcurl Ver.7.16.0 - 2006/10/30 curl_version()→libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3 libphp5.soやphpコマンドがlibcurl.4.dylibをロードしている 2009年4月8日水曜日 7
8.
プログラムのポイント • 基本的には何でも以下の手順でOK (1) 初期化してハンドルを得る (2) URLを教える (3)
その他のパラメータを設定(オプション設定) (4) 実行する (5) 後始末 • データの受信 • • 2009年4月8日水曜日 コールバック関数を規定に従って定義 関数をパラメータとして指定 8
9.
char *buffer; URLへの単純なアクセス size_t receivedCallback(
void *ptr, size_t size, size_t nmemb, void *stream) { int endPoint = strlen( buffer ); memcpy( buffer + endPoint, ptr, size * nmemb ); buffer[endPoint + size * nmemb + 1]=0; コールバック関数 return size * nmemb; } void simpleHTTP( const char* url, char *receivedStr ) { buffer = receivedStr; URLはhttp://…を指定 buffer[0] = 0; ❶初期化とハンドル取得 CURLcode cc = curl_global_init( CURL_GLOBAL_ALL ); if ( cc == 0 ) { ❷URLを指定する CURL *curlHandle = curl_easy_init(); curl_easy_setopt( curlHandle, CURLOPT_URL, url ); curl_easy_setopt( curlHandle, CURLOPT_WRITEFUNCTION, receivedCallback ); curl_easy_setopt( curlHandle, CURLOPT_VERBOSE, 1 ); ❸オプションの指定 CURLcode success = curl_easy_perform( curlHandle ); デバッグに if ( success != 0 ) { 便利 sprintf( receivedStr, "libcurl error: %d", success ); ❹実行 } curl_easy_cleanup( curlHandle ); } ❺後始末 } 2009年4月8日水曜日 9
10.
HTTPのポスト void httpPost( const
char* url, const char* postStr, char *receivedStr ) { buffer = receivedStr; buffer[0] = 0; POST用のデータを作る CURLcode cc = curl_global_init( CURL_GLOBAL_ALL ); が、URLエンコードは if ( cc == 0 ) { libcurlの関数を使う CURL *curlHandle = curl_easy_init(); curl_easy_setopt( curlHandle, CURLOPT_URL, url ); curl_easy_setopt( curlHandle, CURLOPT_WRITEFUNCTION, receivedCallback ); char *urlEncoded = curl_easy_escape( curlHandle , postStr , 0 ); char *param = "postdata"; char *postData = malloc( strlen( urlEncoded ) + strlen( param ) + 2 ); strcpy( postData, param ); strcat( postData, "=" ); strcat( postData, urlEncoded ); curl_easy_setopt(curlHandle, CURLOPT_POSTFIELDS, postData); curl_easy_setopt( curlHandle, CURLOPT_VERBOSE, 1 ); CURLcode success = curl_easy_perform( curlHandle ); if ( success != 0 ) { sprintf( receivedStr, "libcurl error: %d", success ); } free( postData ); curl_free( urlEncoded ); curl_easy_cleanup( curlHandle ); } } 2009年4月8日水曜日 10
11.
SSLを使った通信 URLはhttps://…を指定 void https( const
char* url, char *receivedStr ) { オプションの指定 buffer = receivedStr; buffer[0] = 0; 後者は自己署名のサイトで CURLcode cc = curl_global_init( CURL_GLOBAL_ALL ); もエラーにならなくなる if ( cc == 0 ) { CURL *curlHandle = curl_easy_init(); curl_easy_setopt( curlHandle, CURLOPT_URL, url ); curl_easy_setopt( curlHandle, CURLOPT_WRITEFUNCTION, receivedCallback ); // curl_easy_setopt(curlHandle, CURLOPT_SSL_VERIFYPEER, 0L); // curl_easy_setopt(curlHandle, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt( curlHandle, CURLOPT_VERBOSE, 1 ); CURLcode success = curl_easy_perform( curlHandle ); if ( success != 0 ) { sprintf( receivedStr, "libcurl error: %d", success ); } curl_easy_cleanup( curlHandle ); } } 2009年4月8日水曜日 11
12.
認証が必要なWebサイト void httpAuth( const
char* url, const char* username, const char* password, char *received buffer = receivedStr; buffer[0] = 0; 認証情報はユーザ名とパス CURLcode cc = curl_global_init( CURL_GLOBAL_ALL ); ワードをつなげて指定 if ( cc == 0 ) { CURL *curlHandle = curl_easy_init(); curl_easy_setopt( curlHandle, CURLOPT_URL, url ); curl_easy_setopt( curlHandle, CURLOPT_WRITEFUNCTION, receivedCallback ); char *authInfo = malloc( strlen( username ) + strlen( password ) + 2 ); strcpy( authInfo, username ); strcat( authInfo, ":" ); strcat( authInfo, password ); curl_easy_setopt( curlHandle, CURLOPT_USERPWD, authInfo ); curl_easy_setopt( curlHandle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST|CURLAUTH_BASIC); curl_easy_setopt( curlHandle, CURLOPT_VERBOSE, 1 ); CURLcode success = curl_easy_perform( curlHandle ); if ( success != 0 ) { sprintf( receivedStr, "libcurl error: %d", success ); } curl_easy_cleanup( curlHandle ); free( authInfo ); } } 2009年4月8日水曜日 12
13.
CURLOPT_VERBOSE 2009年4月8日水曜日 13
14.
まとめとURL • • • • 簡単に使えるlibcurl Cでの文字列処理はちょっと面倒 動作の原理を知ればCURLHANDLEも便利 URLs • • • • cURL and libcurl http://curl.haxx.se/ CURLHANDLE 2009年4月8日水曜日 http://code.google.com/p/curlhandle/ 14
Download now