headers = curl_slist_append(headers,
"Host: 0xz.sz.qcloud.com"
);
headers = curl_slist_append(headers,
"yousa3: zym"
);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
指定url
string url = "http://10.54.69.29:80/test/usr/loveqiqian";
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
res = curl_easy_perform(curl);
设置HTTP请求的body
这里发送的请求是POST请求,通过如下代码设置的是POST请求
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
如果没有指定contenttype,那么contenttype默认是post的标准表单格式,application/x-www-form-urlencoded
设置body是如下代码:
char hello[12] = "a=hello";
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(hello));
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, hello);
获取响应响应码
res获取到的就是HTTP响应码
res = curl_easy_perform(curl);
获取响应header以及响应body
string
header
;
string
result;
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION,
&
write_data);
curl_easy_setopt(curl, CURLOPT_HEADERDATA,
&
header
);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,
&
write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA,
&
result);
size_t write_data(
void
*
buffer, size_t size, size_t nmemb,
void
*
userp){
char
*
d
=
(char
*
)buffer;
string
*
b
=
(
string
*
)(userp);
int result
=
0
;
if
(b
!=
NULL
){
b
->
append(d, size
*
nmemb);
result
=
size
*
nmemb;
return
result;
PS:HEAD请求的响应是没有body的,需要额外设置一行
curl_easy_setopt(curl, CURLOPT_NOBODY, 1);
#include <stdio.h>
#include <iostream>
#include <curl/curl.h>
#include <string.h>
using namespace std;
size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp);
int main() {
cout<<"hello world" << endl;
CURL *curl;
CURLcode res;
curl = curl_easy_init();
string url = "http://10.54.69.29:80/test/usr/loveqiqian";
string header;
string result;
struct curl_slist *headers = NULL;
char hello[12] = "a=hello";
headers = curl_slist_append(headers, "Host: 0xz.sz.qcloud.com");
headers = curl_slist_append(headers, "yousa3: zym");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(hello));
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, hello);
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, &write_data);
curl_easy_setopt(curl, CURLOPT_HEADERDATA, &header);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &result);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
res = curl_easy_perform(curl);
cout << header << endl << endl;
cout << result << endl;
cout << res << endl;
curl_easy_cleanup(curl);
return 0;
size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp){
char *d = (char*)buffer;
string *b = (string*)(userp);
int result = 0;
if (b != NULL){
b->append(d, size*nmemb);
result = size*nmemb;
return result;
代码简单解释设置header首先要声明header的结构体变量,然后设置对应header值,最后将其设置到curl结构体中//声明CURL *curl;struct curl_slist *headers = NULL;//赋值header值headers = curl_slist_append(headers, "Host: 0xz.sz.qcloud.com");h...
关于libcurl的相关函数介绍以及参数详见官方说明 https://curl.haxx.se/libcurl/c/example.html
一、post / get其实也没啥特别区别,本质区别在于通常情况下post是发送两个TCP数据包一个是head确认完之后继续发一个data数据包,而GET直接发送head和data数据包,其次是写法不一样。
二、post/get参数获取返回js...
在工作中需要完成一个工具,该工具主要的用途就是向指定的服务器和端口发送http请求,为了提高性能,采用多线程的方式进行,同时采用libcurl的异步形式。代码如下,在其中添加一些注释来记录写代码中遇到的问题。#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdarg.h
首先我们创建一个php页面:<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<form action="#" method="post">
<input name="pass" type="text"></input>
<input name="submit" type="submit" value="Login
接口说明使用步骤setopt函数部分选项说明示例写数据回调GET请求POST请求
libCurl是一个多协议、跨平台的客户端URL传输库;使用libCurl可方便地进行HTTP请求。
libCurl提供easy interface和multi interface两种HTTP请求方式;本文主要是easy interface的使用说明。
使用步骤
libCurl主要采用Callback方式完成数据传输,设置好参数后和回调函数后,在满足条件时会自动调用相应的回调函数实现对应功能。一般按如下顺序调用:
php中可以通过curl来模拟http请求,同时可以获取http response header和body,当然也设置参数可以只获取其中的某一个。当设置同时获取response header和body时候,它们会一同作为结果返回。这时需要我们自己来分离它们。
下面代码是模拟向google一个http GET请求
function ht
1 LibCurl简介
LibCurl是免费的客户端URL传输库,支持FTP,FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, FILE ,LDAP等协议,其主页是http://curl.haxx.se/。Libcurl具备线程安全、IpV6兼容、易于使用的特点。本文档主要介绍LibCurl在http协议方面的应用。
1.1HT
我可以为你提供一个使用libcurl写一个文件下载的代码的例子:#include <stdio.h>
#include <curl/curl.h>int main(void)
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/example.zip");
/* 设置文件保存到本地 */
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
/* 执行下载 */
res = curl_easy_perform(curl);
/* 检查错误 */
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
/* 释放资源 */
curl_easy_cleanup(curl);
return 0;