1. 程式人生 > >C++ 用libcurl庫進行http 網路通訊程式設計

C++ 用libcurl庫進行http 網路通訊程式設計

五、libcurl使用的HTTP訊息頭
    當使用libcurl傳送http請求時,它會自動新增一些http頭。我們可以通過CURLOPT_HTTPHEADER屬性手動替換、新增或刪除相應 的HTTP訊息頭。
    Host
    http1.1(大部分http1.0)版本都要求客戶端請求提供這個資訊頭。
    Pragma
    "no-cache"。表示不要緩衝資料。
    Accept
    "*/*"。表示允許接收任何型別的資料。
    Expect
    以POST的方式向HTTP伺服器提交請求時,libcurl會設定該訊息頭為"100-continue",它要求伺服器在正式處理該請求之前,返回一 個"OK"訊息。如果POST的資料很小,libcurl可能不會設定該訊息頭。
自定義選項


    當前越來越多的協議都構建在HTTP協議之上(如:soap),這主要歸功於HTTP的可靠性,以及被廣泛使用的代理支援(可以穿透大部分防火牆)。 這些協議的使用方式與傳統HTTP可能有很大的不同。對此,libcurl作了很好的支援。
    自定義請求方式(CustomRequest)
    HTTP支援GET, HEAD或者POST提交請求。可以設定CURLOPT_CUSTOMREQUEST來設定自定義的請求方式,libcurl預設以GET方式提交請求:
    curl_easy_setopt(easy_handle, CURLOPT_CUSTOMREQUEST, "MYOWNREQUEST");
 

修改訊息頭

    HTTP協議提供了訊息頭,請求訊息頭用於告訴伺服器如何處理請求;響應訊息頭則告訴瀏覽器如何處理接收到的資料。在libcurl中,你可以自由的新增 這些訊息頭:

複製程式碼
struct curl_slist *headers=NULL; /* init to NULL is important */
headers = curl_slist_append(headers, "Hey-server-hey: how are you?");
headers = curl_slist_append(headers, "X-silly-content: yes");
/* pass our list of custom made headers 
*/ curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers); curl_easy_perform(easyhandle); /* transfer http */ curl_slist_free_all(headers); /* free the header list */
複製程式碼

對於已經存在的訊息頭,可以重新設定它的值:

headers = curl_slist_append(headers, "Accept: Agent-007"); 
headers = curl_slist_append(headers, "Host: munged.host.line"); 

刪除訊息頭
對於一個已經存在的訊息頭,設定它的內容為空,libcurl在傳送請求時就不會同時提交該訊息頭:

headers = curl_slist_append(headers, "Accept:");

六、獲取http應答頭資訊

    發出http請求後,伺服器會返回應答頭資訊和應答資料,如果僅僅是列印應答頭的所有內容,則直接可以通過curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, 列印函式)的方式來完成,這裡需要獲取的是應答頭中特定的資訊,比如應答碼、cookies列表等,則需要通過下面這個函式:
    CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... ); 
    info引數就是我們需要獲取的內容,下面是一些引數值:
    1.CURLINFO_RESPONSE_CODE
    獲取應答碼
    2.CURLINFO_HEADER_SIZE
    頭大小
    3.CURLINFO_COOKIELIST
    cookies列表

    除了獲取應答資訊外,這個函式還能獲取curl的一些內部資訊,如請求時間、連線時間等等。

    更多的引數可以參考API文件。

相關推薦

C++ libcurl進行http 網路通訊程式設計

五、libcurl使用的HTTP訊息頭     當使用libcurl傳送http請求時,它會自動新增一些http頭。我們可以通過CURLOPT_HTTPHEADER屬性手動替換、新增或刪除相應 的HTTP訊息頭。     Host     http1.1(大部分http1.0)版本都要求客戶端請求提供這個

C/C++ libcurl進行http通訊網路程式設計

五、libcurl使用的HTTP訊息頭     當使用libcurl傳送http請求時,它會自動新增一些http頭。我們可以通過CURLOPT_HTTPHEADER屬性手動替換、新增或刪除相應 的HTTP訊息頭。     Host     http1.1(大部分http1.0)版本都要求客戶端請求提供這個資

C++libcurl進行http通訊網路程式設計

//採用CURLOPT_RESUME_FROM_LARGE 實現檔案斷點續傳功能 #include <stdlib.h> #include <stdio.h> #include <sys/stat.h> #include <curl/curl.h> //這個

C/C++使用libcurl傳送http請求

C++要實現http網路連線,需要藉助第三方庫,libcurl使用起來還是很方便的 環境:win32 + vs2015 如果要在linux下使用,用cmake編譯,使用基本同理 1,下載編譯libcurl 下載curl原始碼,找到vs工程,按照x86 x64 並對

C/C++使用libcurl發送http請求(get和post可以用於請求html信息,也可以請求xml和json等串)

網絡連接 get 編譯 eas views vs2015 return tar linux C++要實現http網絡連接,需要借助第三方庫,libcurl使用起來還是很方便的 環境:win32 + vs2015 如果要在Linux下使用,基本同理 1,下載

linux下使用libcurl開發http請求客戶端

一、運用開源庫libcurl開發http請求客戶端,實現檔案上傳和字串傳送的功能 /****************************************************** *** Copyright(C) *** author Lu GuoFu *** date 2018-

windows c/c++使用libevent編寫http/https服務端

一、前言 本文章旨在對自己接觸過的專案的一種溫習回顧,以此編寫作為筆記,也希望能幫到各位有需要的道友, 若有任何建議或探討可加 QQ群進行交流:887939177 二、間單描述 建立http server,只需編譯libevent庫即可,若想建立https

C++實現上位機6:網路通訊類CCommnication

CCommnication標頭檔案: #pragma once //#include "CCreateHex.h" #include "CComminicationTool.h" //#include "CEthernetTCP.h" #include "CSerialP

libcurlhttp get和http post使用【轉】

一、libcurl中的http get使用方法   1. 為什麼要使用libcurl 1) 作為http的客戶端,可以直接用socket連線伺服器,然後對到的資料進行http解析,但要分析協議頭,實現代理…這樣太麻煩了。   2) libcur

怎麼VB.NET進行串列埠通訊-四川成都軟體開發定製APP程式設計

文-沙鷗-2018.11.9     1,前言 前一段時間一位認識的朋友找到我,知道我這裡是做工控自動化、電路板、控制器、儀器儀表、軟體APP開發定製的(業務QQ2531263726),於是跟我說要把一個指紋模組和他們公司的觸控式螢幕結合起來做成一個系統,發來了資料看了一下,

VLFeat進行k-means聚類

摘要 本文將介紹如何使用VLFeat開源庫來進行K-means聚類,關於K-means的介紹可以參考這裡。 什麼是VLFeat 用VLFeat官方主頁的話來說,VLFeat 是一個實現了視覺領域諸多演算法的開源庫,其包括SIFT, MSER,  k-means,hierarchical k-means

如何基於TCP/IP協議進行MFC Socket網路通訊程式設計

MFC Socket網路通訊程式設計        最近因為一個專案需要進行區域網絡通訊,向工作單位的軟體工程師請教了一下需要用到哪些知識,然後博主就自學了一遍windows網路通訊程式設計原理,然後就在網上找了一大堆例子,但實際執行效果並不佳,花了大概一週多的時間總算是把

C/C++網路通訊程式設計(一)

一、Internet與TCP/IP協議     Internet的發展大致可為四個階段:60年代,Internet起源;70年代,TCP/IP協議,Internet隨之發展起來;80年代,NFSnet出現,併成為當今Internet的基礎;90年代,Internet進入高速

Windows上C++使用共享記憶體進行程序間通訊

共享記憶體 (也叫記憶體對映檔案) 主要是通過對映機制實現的 , Windows 下程序的地址空間在邏輯上是相互隔離的 , 但在物理上卻是重疊的 ; 所謂的重疊是指同一塊記憶體區域可能被多個程序同時使用

網路通訊程式設計筆記(二):pcap使用

  Libpcap是Packet Capture Libray的英文縮寫,即資料包捕獲函式庫。該庫提供的C函式介面用於捕捉經過指定網路介面的資料包,該介面應該是被設為混雜模式。這個在原始套接子中有提到。   著名的軟體TCPDUMP就是在Libpcap的基礎上開發而成的。L

libcurlhttp部分介紹

//採用CURLOPT_RESUME_FROM_LARGE 實現檔案斷點續傳功能 #include <stdlib.h> #include <stdio.h> #include <sys/stat.h> #include <curl/curl.h> //這個

HTTP網路通訊小結

1.頁面從輸入 URL 到頁面載入顯示完成的過程 分為4個步驟: (1)當傳送一個URL請求時,不管這個URL是Web頁面的URL還是Web頁面上每個資源的URL,瀏覽器都會開啟一個執行緒來處理這

C/C++使用libcurl實現post圖片的兩種方式

一.直接上傳檔案方式將圖片檔案跟在引數的後面,這裡的curl和引數需要根據自己的需要修改    char *url="         ";    CURL *pCurl = NULL;CURLcode res;struct curl_slist *headerlist =

C呼叫libcurl函式 查詢全文搜尋引擎 Elasticsearch

//執行在ubuntu64系統下//curles.c#include <stdio.h>#include <curl/curl.h>#include <string.h>size_t write_data(void *ptr, size_t

C/C++中libcurl的使用-Http GET方法使用詳解

//getDataByCurl.cpp #include <iostream> #include <string> #include <curl/curl.h> #include <curl/types.h>; #include <curl/easy