日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

libcurl库简介

發布時間:2024/1/1 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 libcurl库简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、libcurl等第三方庫的通用編譯方法
    • 1、庫下載
    • 2、開始安裝庫
  • 二、調用libcurl編程訪問百度主頁
    • 1.代碼
    • 2、編譯注意(編譯時鏈接庫、頭文件路徑,運行需添加動態庫為環境變量)

以下部分內容參考博文
https://www.cnblogs.com/xietianjiao/p/13260021.html
https://blog.csdn.net/zhuguanlin121/article/details/116935439

一、libcurl等第三方庫的通用編譯方法

libcurl是一個跨平臺的網絡協議庫,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 協議。libcurl同樣支持HTTPS證書授權,HTTP POST, HTTP PUT, FTP 上傳, HTTP基本表單上傳,代理,cookies,和用戶認證。

1、庫下載

libcurl的官網 http://curl.haxx.se/
庫下載https://github.com/curl/curl/releases/tag/curl-7_71_1

直接拖拽到Linux中,然后移動到/home下

把curl庫復制到新文件夾

解壓curl


進入解壓后的curl

查看README


進入docs,重點看README文件,怎么安裝庫

查看INSTALL


查看INSTALL.md


Unix環境下的安裝步驟

2、開始安裝庫

  • ./configure
  • make
  • make install
  • 安裝成功

    需要的一些庫
  • 二、調用libcurl編程訪問百度主頁

    1.代碼

    #include <stdio.h> #include <curl/curl.h>typedef unsigned int bool;//數據類型別名用typedef 有分號 #define true 1 //宏定義(替換)用define 無冒號 #define false 0bool getUrl(char *filename)//GET請求 {CURL *curl;CURLcode res;FILE *fp;if ((fp = fopen(filename, "w")) == NULL) // 返回結果用文件存儲return false;struct curl_slist *headers = NULL;headers = curl_slist_append(headers, "Accept: Agent-007");curl = curl_easy_init(); // 初始化if (curl){//curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");// 代理curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);// 改協議頭curl_easy_setopt(curl, CURLOPT_URL,"http://www.baidu.com");curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); //將返回的http頭輸出到fp>指向的文件,//即為filename文件,而主函數傳入的參數是 /tmp/get.html,即為真正保存在get.html文件中curl_easy_setopt(curl, CURLOPT_HEADERDATA, fp); //將返回的html主體數據輸出到fp指向的文件res = curl_easy_perform(curl); // 執行if (res != 0) {curl_slist_free_all(headers); //釋放句柄curl_easy_cleanup(curl);}fclose(fp);return true;} } bool postUrl(char *filename)//POST請求 {CURL *curl;CURLcode res;FILE *fp;if ((fp = fopen(filename, "w")) == NULL)return false;curl = curl_easy_init();if (curl){curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "&logintype=uid&u=xieyan&psw=xxx86"); // 指定post內容:用戶信息 字段之間&連接,嘗試登陸新浪郵箱//curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");curl_easy_setopt(curl, CURLOPT_URL, " http://mail.sina.com.cn/cgi-bin/login.cgi "); // 指定urlcurl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);res = curl_easy_perform(curl);//執行curl_easy_cleanup(curl);}fclose(fp);return true; } int main(void) {getUrl("/tmp/get.html");postUrl("/tmp/post.html"); }

    為什么要有下面的那三句代碼呢?
    類似于bool,true,faluse,這是C99標準才會支持,C++里有專門的bool類型,用來表示真或假。但是在C語言里沒有這樣的類型,為了修改方便直接這樣替換。

    2、編譯注意(編譯時鏈接庫、頭文件路徑,運行需添加動態庫為環境變量)

    鏈接庫和頭文件再編譯,同時注意指明他們的路徑

    gcc Test1.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl
    • Test1.c 文件名
    • ./curl-7.71.1/_install/include/ 頭文件的路徑
      -./curl-7.71.1/_install/lib/ 庫的路徑

    注意:動態庫靜態庫的鏈接用-L,而頭文件用-I

    錯誤排查:

    • (1)提示找不到頭文件#include <curl/curl.h>,說明沒有指明頭文件的路徑

    • (2)如果只是使用-L是默認去usr/lib下去找的,會提示找不到庫文件的路徑cannot find -lcurl

    • (3)如果編譯報錯一堆函數不認識,函數是存在庫里面的,說明沒有鏈接庫

      鏈接動態庫:

      export LD_LIBRARY_PATH=庫的路徑

    成功運行后,可以看到vi /tmp/get.html中已經有了百度官網的代碼。

    總結

    以上是生活随笔為你收集整理的libcurl库简介的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。