1. 程式人生 > >c裡面使用libcurl庫實現傳送post並獲取post到的內容

c裡面使用libcurl庫實現傳送post並獲取post到的內容

以下是c程式碼的實現:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>

#define POSTURL    "http://www.xiami.com/member/login"
#define POSTFIELDS "[email protected]&password=mypassword&autologin=1&submit=登 錄&type="
#define FILENAME   "curlposttest.log"

size_t write_data(void* buffer,size_t size,size_t nmemb,void *stream)
{
	FILE *fptr = (FILE*)stream;
	fwrite(buffer,size,nmemb,fptr);
	return size*nmemb;
}

int main(int argc,char *argv[])
{
	CURL *curl;
	CURLcode res;
	FILE* fptr;
	struct curl_slist *http_header = NULL;

	if ((fptr = fopen(FILENAME,"w")) == NULL)
	{
		fprintf(stderr,"fopen file error:%s\n",FILENAME);
		return -1;
	}

	curl = curl_easy_init();
	if (!curl)
	{
		fprintf(stderr,"curl init failed\n");
		return -1;
	}

	curl_easy_setopt(curl,CURLOPT_URL,POSTURL); //url地址
	curl_easy_setopt(curl,CURLOPT_POSTFIELDS,POSTFIELDS); //post引數
	curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_data); //對返回的資料進行操作的函式地址
	curl_easy_setopt(curl,CURLOPT_WRITEDATA,fptr); //這是write_data的第四個引數值
	curl_easy_setopt(curl,CURLOPT_POST,1); //設定問非0表示本次操作為post
	curl_easy_setopt(curl,CURLOPT_VERBOSE,1); //列印除錯資訊
	curl_easy_setopt(curl,CURLOPT_HEADER,1); //將響應頭資訊和相應體一起傳給write_data
	curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1); //設定為非0,響應頭資訊location
	curl_easy_setopt(curl,CURLOPT_COOKIEFILE,"/Users/zhu/CProjects/curlposttest.cookie");

	res = curl_easy_perform(curl);

	if (res != CURLE_OK)
	{
		switch(res)
		{
			case CURLE_UNSUPPORTED_PROTOCOL:
				fprintf(stderr,"不支援的協議,由URL的頭部指定\n");
			case CURLE_COULDNT_CONNECT:
				fprintf(stderr,"不能連線到remote主機或者代理\n");
			case CURLE_HTTP_RETURNED_ERROR:
				fprintf(stderr,"http返回錯誤\n");
			case CURLE_READ_ERROR:
				fprintf(stderr,"讀本地檔案錯誤\n");
			default:
				fprintf(stderr,"返回值:%d\n",res);
		}
		return -1;
	}

	curl_easy_cleanup(curl);
}

相關推薦

c裡面使用libcurl實現傳送post獲取post到的內容

以下是c程式碼的實現: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <curl/curl.h> #define POSTURL

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

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

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

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

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

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

C++藉助curses實現俄羅斯方塊

主要要實現如下幾個功能:方塊的移動控制、方塊變形、判定方塊是否接觸邊界和進行方塊堆積、對方塊進行消除。 1.方塊的移動控制上下左右四個方向上-->變形,下-->加速下落,左-->向左移動,右-->向右移動注意在移動的時候,還要判定是否接觸邊界,特別是向下移動,除了需要確定是否接觸底部

libcurl的http get和http post使用【轉】

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

C++ 使用openssl實現 DES 加密——CBC模式 && RSA加密——公加私解——私加公解

  之前工作上需要用C++把軟體生成的使用者序列號用des加密cbc的模式,加密後為二進位制,轉化為十六進位制,然後提供給java寫的授權碼管理平臺。 java平臺會根據使用者序列號,生成一個授權碼,授權碼是用rsa 私加公解的模式加密的,加密後為二進位制,然後轉為safeBase64格式。授權碼拿來在C++

Libcurl使用傳送單個檔案及多個檔案demo

demo: #include <stdio.h> #include <string.h> #include <curl/curl.h> #include <s

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呼叫libcurl函式 查詢全文搜尋引擎 Elasticsearch

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

C#基於Quartz.NET實現任務排程部署Windows服務

一、Quartz.NET介紹 Quartz.NET是一個強大、開源、輕量的作業排程框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改寫,可用於winform和asp.net mvc、.Net Core應用中。它靈活而不復雜。你能夠用它來為執行一個作業而建立簡單的或複雜的作業

hibernate實現表聯查獲取某個欄位的最大值(隨筆)

最近試用hibernate實現三表連線查詢並分組顯示某個欄位的最大值,在mysql中語句可以執行,改成hql無法執行,遂寫下隨筆以記錄 mysql中查詢,可以查詢到相應的結果 改寫成hql語句 "select o.equipment.equId, o.olderName

C#呼叫批處理(bat)檔案,獲取執行批處理(bat)檔案後返回值

/// /// 執行BAT檔案 /// /// csv檔案引數 /// bat檔案執行返回值 static string execBAT(string fileName) { ProcessStartInfo pro = new System.Diagnostics.ProcessStartInf

函式實現 -- 分割字串,獲取最後一段字串

在寫myshell的時候, 發現系統shell會顯示當前目錄, 也想實現這樣的效果, 但是我只找到了一個函式 char *getcwd( char *buffer, int maxlen ); //功 能:獲取當前工作目錄 //引數說明:getcwd()會將當

【轉】Django中使用POST方法獲取POST數據

class 需要 request www ict .html bsp 請求 post 1.獲取POST中表單鍵值數據 如果要在django的POST方法中獲取表單數據,則在客戶端使用JavaScript發送POST數據前,定義post請求頭中的請求數據類型:

Python爬蟲:lxml模組分析獲取網頁內容

運用css選擇器: # -*- coding: utf-8 -*- from lxml import html page_html = ''' <html><body> <input id="input_id" value="input value" nam

PHP CURL POST無法獲取響應內容的問題

現象: 使用PHP的CURL相關函式進行POST,當要POST的引數內容長度超過1024時,將無法獲得response的資料。 即: curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLO

使用BS4解析網頁內容 獲取指定內容

# -*- coding: utf-8 -*- import sys import requests reload(sys) sys.setdefaultencoding("utf-8") # 使用