#author("2022-11-18T05:33:08+00:00","default:admin","admin") #author("2023-02-21T05:11:35+00:00","default:admin","admin") *curl [#db5f3b62] -[[よく使うcurl コマンドのオプション Tips:https://tech.excite.co.jp/entry/2023/02/21/123027]] -[[[PHP][cURL] cURLでSSL(https)のCA証明書警告の回避や設定:http://mio-koduki.blogspot.jp/2012/08/php-curlsslhttpsca.html]] -[[curl:https://segakuin.com/linux/command/curl.html]] -[[curlでリトライとHTTPステータス確認:https://qiita.com/koji-cw/items/a9aa3d3551d94be919a3]] -[[curlでHTTP処理にかかった時間を計測する:http://rikuga.me/2014/03/11/curl%E3%81%A7http%E5%87%A6%E7%90%86%E3%81%AB%E3%81%8B%E3%81%8B%E3%81%A3%E3%81%9F%E6%99%82%E9%96%93%E3%82%92%E8%A8%88%E6%B8%AC%E3%81%99%E3%82%8B]] -[[curlで150ms損していた話:https://qiita.com/tohta/items/e98e920c8a45025615ec]] -[[curlでボトルネック調査をする:http://akuwano.hatenablog.jp/entry/20120503/1335994486]] **エラーコード [#zc8f2021] -[[libcurl error codes:https://curl.se/libcurl/c/libcurl-errors.html]] *libcurl [#q080bdb0] -[[libcurl - the multiprotocol file transfer library:https://curl.haxx.se/libcurl/]] -[[libcurl公式チュートリアルを和訳してまとめていく:https://qiita.com/suneo3476/items/a00113de2d005fa50440]] -[[curl コマンドでWEBリクエストするC言語のソースを自動生成:https://takuya-1st.hatenablog.jp/entry/2015/06/25/172521]] -[[[C言語] curl libを使ってみる:https://qiita.com/edo_m18/items/a0073d81431bfd5681e2]] -[[C++でlibcurlを利用したHTTPクライアント:https://memo.appri.me/programming/cpp-curl-http-client]] -[[libcurlのHTTPS通信でSSL/TLSセッションを再利用する:https://hogehuga.net/c-2/301/]] -[[libcurlが使用するNSSにdentryが肥大化するバグがあった:https://qiita.com/ldr/items/4b39fdcb8fae7d09f406]] **[[curl_easy_setopt():https://curl.se/libcurl/c/curl_easy_setopt.html]] [#z4cf6122] -CURLOPT_URL -[[CURLOPT_SSL_VERIFYPEER:https://curl.se/libcurl/c/CURLOPT_SSL_VERIFYPEER.html]] --false を設定すると、cURL はサーバー証明書の検証を行わない -[[CURLOPT_WRITEDATA:https://curl.se/libcurl/c/CURLOPT_WRITEDATA.html]] -[[CURLOPT_WRITEFUNCTION:https://curl.se/libcurl/c/CURLOPT_WRITEFUNCTION.html]] -[[CURLOPT_TIMEOUT:https://curl.se/libcurl/c/CURLOPT_TIMEOUT.html]] -[[CURLOPT_NOSIGNAL:https://curl.se/libcurl/c/CURLOPT_NOSIGNAL.html]] -[[CURLOPT_CUSTOMREQUEST:https://curl.se/libcurl/c/CURLOPT_CUSTOMREQUEST.html]] -[[CURLOPT_POST:https://curl.se/libcurl/c/CURLOPT_POST.html]] -[[CURLOPT_POSTFIELDS:https://curl.se/libcurl/c/CURLOPT_POSTFIELDS.html]] **スレッド実行の注意点 [#o56b8615] -[[[libcurl]CURLOPT_NOSIGNALを設定するとスレッドセーフになる理由がわからない:https://teratail.com/questions/68223]] --CURLOPT_NOSIGNALを設定すると、cURL関数がプロセスにシグナルを送らなくなる --POSIX互換システム上での経験則として、スレッド(thread)とシグナル(singal)の併用はトラブルの元です --良くあるシナリオとしてはスレッドライブラリ内部実装でシグナルを利用しており、ユーザアプリ側のシグナル利用と干渉して誤動作やクラッシュを引き起こしたりします --libcurl内ではデフォルト設定でシグナル利用し、ユーザアプリとリンクされる"スレッドライブラリ内"でもシグナル利用する。このとき、"相互"にシグナルを拾って意図しない動作をする可能性がある。 -[[マルチスレッドで「libcurl」使用時の注意点:https://blog.regrex.jp/2019/07/01/%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%81%A7%E3%80%8Clibcurl%E3%80%8D%E4%BD%BF%E7%94%A8%E6%99%82%E3%81%AE%E6%B3%A8%E6%84%8F%E7%82%B9/]] --初期化処理を明示的に記載していない場合、「curl_easy_init()」内部で「curl_global_init()」が、「curl_easy_cleanup()」内部で「curl_global_cleanup()」が呼ばれる --しかし「curl_global_init()」と「curl_global_cleanup()」はスレッドセーフ」ではない --上記処理の初期化から終了までの間に、別スレッドから初期化処理が実行されると 「segmentation fault」が発生してアプリが落ちる --それを回避するには、「curl_global_init()」をアプリ開始時に1回、「curl_global_cleanup()」をアプリ終了時に1回実行されるような作りにすれば良い -[[C ++でのcURLとマルチスレッドの使用:https://www.javaer101.com/en/article/51357996.html]]