cur_基本参数和使用

获取 请求数据

file_get_contents(“php://input”)

一 .curl 请求过程

//要访问的接口

$url = 'http://curl.zql.dev.shop/index.php';

//访问方式

$method = 'POST';

//请求参数

$data = [

​      'name' => 'zhangsan',

​      'passwd' => '123',

  ];

  $data = json_encode($data);

  //请求初始化

  $ch = curl_init();

  //设置 curl 选项 不必重复的调用curl_setopt()

  curl_setopt_array($ch,[

​          CURLOPT_RETURNTRANSFER => true,//返回内容作为变量,而不是直接输出

​          CURLOPT_TIMEOUT => 60,//设置curl允许执行的最大秒数

​          CURLOPT_CONNECTTIMEOUT => 10,//PHP脚本在成功连接服务器前等待多久

​          CURLOPT_CUSTOMREQUEST => $method,//设置请求方式

​          CURLOPT_POSTFIELDS => $data,//设置请求数据

​          CURLOPT_URL => $url,//设置请求的url

​          CURLOPT_VERBOSE => true,//请求过程输出

​          CURLOPT_STDERR => fopen('/tmp/zql.log','a+'),//将stderr输出到一个文件

​          CURLOPT_HTTPHEADER => [

​              'Content-Type: application/json',

​              'Content-Length: ' . strlen($data)

​          ],

]

 );

  $res = curl_exec($ch);

 //获取返回最后一次的错误代码 0为正常 1为错误

 if(!curl_errno($ch)){

​     var_dump($res);

 }

 // 关闭句柄

 curl_close($ch);

curl_setopt_array() 参数列表

1. 请求方式

CURLOPT_CUSTOMREQUEST => $method

​ curlopt_customerequest

​ 设置请求方式 POST GET

CURLOPT_POST

​ curlopt_post

​ 如果你想PHP去做一个正规的HTTP POST,设置这个选项为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。

2. 请求的url

CURLOPT_URL

​ curlopt_url

​ 这是你想用PHP取回的URL地址。你也可以在用curl_init()函数初始化时设置这个选项

3. 数据的绑定

CURLOPT_POSTFIELDS

​ curlopt_postfields => $data

​ 传递一个作为HTTP “POST”操作的所有数据的字符串

CURLOPT_REFERER

​ curlopt_referer

​ 在HTTP请求中包含一个”referer”头的字符串
cur_基本参数和使用_第1张图片
CURLOPT_USERAGENT

​ curlopt_useragent

​ 在HTTP请求中包含一个”user-agent”头的字符串
cur_基本参数和使用_第2张图片
CURLOPT_COOKIE

​ curlopt_cookie

​ 传递一个包含HTTP cookie的头连接

CURLOPT_SSLCERT

​ curl_sslcert

​ 传递一个包含PEM格式证书的字符串

CURLOPT_SSLCERTPASSWD

​ curlopt_sslcertpasswd

​ 传递一个包含使用CURLOPT_SSLCERT证书必需的密码

CURLOPT_COOKIEFILE

​ curlopt_cookiefile

​ 传递一个包含cookie数据的文件的名字的字符串。这个cookie文件可以是Netscape格式,或是堆存在文件中的HTTP风格的头

CURLOPT_CUSTOMREQUEST

​ curlopt_customrequest

​ 当进行HTTP请求时,传递一个字符被GET或HEAD使用。为进行DELETE或其它操作是有益的,更Pass a string to be used instead of GET or HEAD when doing an HTTP request. This is useful for doing or another, more obscure, HTTP request

CURLOPT_INFILE

​ curlopt_infile

​ 这个文件是你传送过来的输入文件

CURLOPT_WRITEHEADER

​ curlopt_writeheader

​ 这个文件写有你输出的头部分

4. 输出的请求过程

CURLOPT_VERBOSE

​ 请求过程详细模式开关 和8 一起用更好

​ CURLOPT_VERBOSE => true,//请求过程输出

CURLOPT_STDERR

​ 请求过程输出到文件,将stderr输出到一个文件

​ CURLOPT_STDERR => fopen(’/tmp/zql.log’,‘a+’)

5. 文件上传

CURLOPT_INFILESIZE

​ curlopt_infilesize

​ 当你上传文件到远程站点,这个选项告诉上传文件的大小

CURLOPT_UPLOAD

​ curlopt_upload

​ 如果你想让PHP为上传做准备,设置这个选项为一个非零值

CURLOPT_PUT

​ curlopt_put

​ 设置这个选项为一个非零值去用HTTP上传一个文件。要上传这个文件必须设置CURLOPT_INFILE和CURLOPT_INFILESIZE选项.

CURLOPT_MUTE

设置这个选项为一个非零值,PHP对于CURL函数将完全沉默

6. ftp 远程连接

CURLOPT_FTPLISTONLY

​ curlopt_ftplistonly

​ 设置这个选项为非零值,PHP将列出FTP的目录名列表

CURLOPT_FTPAPPEND

​ curlopt_ftpappend

​ 设置这个选项为一个非零值,PHP将应用远程文件代替覆盖它

CURLOPT_NETRC

​ curlopt_netrc

​ 设置这个选项为一个非零值,PHP将在你的 ~./netrc 文件中查找你要建立连接的远程站点的用户名及密码

CURLOPT_USERPWD

​ curlopt_userpwd

​ 传递一个形如[username]:[password]风格的字符串,作用PHP去连接

CURLOPT_PROXYUSERPWD

​ curlopt_proxyuserpwd

​ 传递一个形如[username]:[password] 格式的字符串去连接HTTP代理

CURLOPT_RANGE

​ curlopt_rang

​ 传递一个你想指定的范围。它应该是”X-Y”格式,X或Y是被除外的。HTTP传送同样支持几个间隔,用逗句来分隔(X-Y,N-M)

CURLOPT_FTPPORT

​ curlopt_ftpport

​ 传递一个包含被ftp “POST”指令使用的IP地址。这个POST指令告诉远程服务器去连接我们指定的IP地址。这个字符串可以是一个IP地址,一个主机名,一个网络界面名(在UNIX下),或是‘-’(使用系统默认IP地址)

7. 请求过程输出

CURLOPT_VERBOSE => true

​ curlopt_verbose

​ 请求过程详细模式开关

CURLOPT_STDERR => fopen(’/tmp/zql.log’,‘a+’)

​ curlopt_stderr

​ 请求过程输出到文件,将stderr输出到一个文件

8. 请求 header body

CURLOPT_HTTPHEADER

设置请求的头信息

curl_setopt($ch, CURLOPT_HTTPHEADER, array(

​ ‘Content-Type: application/json’,

​ 'Content-Length: ’ . strlen($data_string)

));

CURLOPT_HEADER

​ curlopt_header

​ 如果你想把一个头包含在输出中,设置这个选项为一个非零值, 返回值输出头信息
cur_基本参数和使用_第3张图片
CURLOPT_NOBODY

​ curlopt_nobody

​ 如果你不想在输出中包含body部分,设置这个选项为一个非零值,为0时没有返回信息

CURLOPT_FOLLOWLOCATION

​ curlopt_followlocation

​ 设置这个选项为一个非零值(象 “Location: “)的头,服务器会把它当做HTTP头的一部分发送(注意这是递归的,PHP将发送形如 “Location: “的头)

CURLOPT_LOW_SPEED_LIMIT

​ curlopt_low_speed_limit

​ 设置一个长整形数,控制传送多少字节

CURLOPT_LOW_SPEED_TIME

​ curlopt_low_speed_time

​ 设置整数,控制CURLOPT_LOW_SPEED_LIMIT传送字节数的秒数

CURLOPT_RESUME_FROM

​ curlopt_resume_from

​ 传递一个包含字节偏移地址的长整形参数,(你想转移到的开始表单)

9. SSL

CURLOPT_SSLVERSION

​ curlopt_sslversion

​ 传递一个包含SSL版本的长参数。默认PHP将被它自己努力的确定,在更多的安全中你必须手工设置

CURLOPT_TIMECONDITION

​ curlopt_timecondition

传递一个长参数,指定怎么处理CURLOPT_TIMEVALUE参数。你可以 TIMECOND_IFMODSINCE 或 TIMECOND_ISUNMODSINCE。这仅用于HTTP

CURLOPT_TIMEVALUE

​ curlopt_timevalue

​ 传递一个从1970-1-1开始到现在的秒数。这个时间将被CURLOPT_TIMEVALUE选项作为指定值使用,或被默认TIMECOND_IFMODSINCE使用

CURLOPT_SSL_CIPHER_LIST

CURLOPT_SSL_CIPHER_LIST

一个SSL的加密算法列表。例如RC4-SHA和TLSv1都是可用的加密列表。

CURLOPT_SSLCERT

一个包含PEM格式证书的文件名。

CURLOPT_SSLCERTPASSWD

使用CURLOPT_SSLCERT证书需要的密码。

CURLOPT_SSLCERTTYPE

证书的类型。支持的格式有"PEM" (默认值), “DER"和"ENG”。

在cURL 7.9.3中被加入。

CURLOPT_SSLENGINE

用来在CURLOPT_SSLKEY中指定的SSL私钥的加密引擎变量。

CURLOPT_SSLENGINE_DEFAULT

用来做非对称加密操作的变量。

CURLOPT_SSLKEY

包含SSL私钥的文件名。

CURLOPT_SSLKEYPASSWD

在CURLOPT_SSLKEY中指定了的SSL私钥的密码。

Note:

由于这个选项包含了敏感的密码信息,记得保证这个PHP脚本的安全。

CURLOPT_SSLKEYTYPE

CURLOPT_SSLKEY中规定的私钥的加密类型,支持的密钥类型为"PEM"(默认值)、“DER"和"ENG”。

CURLOPT_URL

10. 忽略300以上错误

CURLOPT_FAILONERROR

​ curlopt_failonerror

​ 如果你想让PHP在发生错误(HTTP代码返回大于等于300)时,不显示,设置这个选项为一人非零值。默认行为是返回一个正常页,忽略代码。

11. 超时时间

CURLOPT_TIMEOUT

​ curlopt_timeout

​ 设置请求连接时间

CURLOPT_CONNECTTIMEOUT => 10

​ curlopt_connettimeout

​ 建立连接等待最长时间

get 传输数据

curl -v 'http://10.255.254.25:10000/cm/getcmdata.json?' -d "app_key=4f0207973f9bc1b7949087676f1ad8e9&province_id=100&city_id=100&cm_code[0]=E_Contract"

案例

curl -l -H "Content-type: application/json" -X POST -d '{"projectid":"e2d879c111fa41b7941f656690eaac7b","flownum": "cf4bcdb4-468a-4a7d-8a21-4d09c907e418","phone": "123456789","content": "123","timestamp": "123456789","sig": "911dcefc611b8a93b19491aeb209d820","channelid": "PT001"}' http://172.16.136.143:9093/YXMB/JSMiddlewarehd/Purchase/addPurchaseRecord

命令行参数

参数:

-v :

verbose 小写的v参数,用于打印更多信息,包括发送的请求信息,这在调试脚本是特别有用
cur_基本参数和使用_第4张图片
-H:

header

指定请求头参数
cur_基本参数和使用_第5张图片
-I

head 仅返回头部信息,使用HEAD请求

-X

指定请求方式 默认为GET
cur_基本参数和使用_第6张图片
-d '{“name”:“zhansan”}'

HTTP POST方式传送数据
cur_基本参数和使用_第7张图片
CURL 常用

-v 查看过程和返回信息及错误信息

-k 跳过证书连接地址

-d/–data HTTP POST方式传送数据

-F/–form 模拟http表单提交数据

-G/–get 以get的方式来发送数据

-H/–header 自定义头信息传递给服务器

-S/–show-error 显示错误

-a/–append 上传文件时,附加到目标文件
-A/–user-agent 设置用户代理发送给服务器
-anyauth 可以使用“任何”身份验证方法
-b/–cookie cookie字符串或文件读取位置
–basic 使用HTTP基本验证
-B/–use-ascii 使用ASCII /文本传输
-c/–cookie-jar 操作结束后把cookie写入到这个文件中
-C/–continue-at 断点续转
-d/–data HTTP POST方式传送数据
–data-ascii 以ascii的方式post数据
–data-binary 以二进制的方式post数据
–negotiate 使用HTTP身份验证
–digest 使用数字身份验证
–disable-eprt 禁止使用EPRT或LPRT
–disable-epsv 禁止使用EPSV
-D/–dump-header 把header信息写入到该文件中
–egd-file 为随机数据(SSL)设置EGD socket路径
–tcp-nodelay 使用TCP_NODELAY选项
-e/–referer 来源网址
-E/–cert 客户端证书文件和密码 (SSL)
–cert-type 证书文件类型 (DER/PEM/ENG) (SSL)
–key 私钥文件名 (SSL)
–key-type 私钥文件类型 (DER/PEM/ENG) (SSL)
–pass 私钥密码 (SSL)
–engine 加密引擎使用 (SSL). “–engine list” for list
–cacert CA证书 (SSL)
–capath CA目录 (made using c_rehash) to verify peer against (SSL)
–ciphers SSL密码
–compressed 要求返回是压缩的形势 (using deflate or gzip)
–connect-timeout 设置最大请求时间
–create-dirs 建立本地目录的目录层次结构
–crlf 上传是把LF转变成CRLF
-f/–fail 连接失败时不显示http错误
–ftp-create-dirs 如果远程目录不存在,创建远程目录
–ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用
–ftp-pasv 使用 PASV/EPSV 代替端口
–ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址
–ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输
–ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输
-F/–form 模拟http表单提交数据
–form-string 模拟http表单提交数据
-g/–globoff 禁用网址序列和范围使用{}和[]
-G/–get 以get的方式来发送数据
**-H/–header ** 自定义头信息传递给服务器
–ignore-content-length 忽略的HTTP头信息的长度
-i/–include 输出时包括protocol头信息
-I/–head 只显示请求头信息
-j/–junk-session-cookies 读取文件进忽略session cookie
–interface 使用指定网络接口/地址
–krb4 使用指定安全级别的krb4
-k/–insecure 允许不使用证书到SSL站点
-K/–config 指定的配置文件读取
-l/–list-only 列出ftp目录下的文件名称
–limit-rate 设置传输速度
–local-port 强制使用本地端口号
-m/–max-time 设置最大传输时间
–max-redirs 设置最大读取的目录数
–max-filesize 设置最大下载的文件总量
-M/–manual 显示全手动
-n/–netrc 从netrc文件中读取用户名和密码
–netrc-optional 使用 .netrc 或者 URL来覆盖-n
–ntlm 使用 HTTP NTLM 身份验证
-N/–no-buffer 禁用缓冲输出
-o/–output 把输出写到该文件中
-O/–remote-name 把输出写到该文件中,保留远程文件的文件名
-p/–proxytunnel 使用HTTP代理
–proxy-anyauth 选择任一代理身份验证方法
–proxy-basic 在代理上使用基本身份验证
–proxy-digest 在代理上使用数字身份验证
–proxy-ntlm 在代理上使用ntlm身份验证
-P/–ftp-port
使用端口地址,而不是使用PASV
-q 作为第一个参数,关闭 .curlrc
-Q/–quote 文件传输前,发送命令到服务器
-r/–range 检索来自HTTP/1.1或FTP服务器字节范围
–range-file 读取(SSL)的随机文件
-R/–remote-time 在本地生成文件时,保留远程文件时间
–retry 传输出现问题时,重试的次数
–retry-delay 传输出现问题时,设置重试间隔时间
–retry-max-time 传输出现问题时,设置最大重试时间
-s/–silent 静默模式。不输出任何东西
-S/–show-error 显示错误
–socks4 用socks4代理给定主机和端口
–socks5 用socks5代理给定主机和端口
–stderr
-t/–telnet-option Telnet选项设置
–trace 对指定文件进行debug
–trace-ascii Like --跟踪但没有hex输出
–trace-time 跟踪/详细输出时,添加时间戳
-T/–upload-file 上传文件
–url Spet URL to work with
-u/–user 设置服务器的用户和密码
-U/–proxy-user 设置代理用户名和密码
-w/–write-out [format] 什么输出完成后
-x/–proxy 在给定的端口上使用HTTP代理
-X/–request 指定什么命令
-y/–speed-time 放弃限速所要的时间,默认为30
-Y/–speed-limit 停止传输速度的限制,速度时间

curl -l -H “Content-type: application/json” -X POST -d '{“reqBody”:{“cellNum”:“13811361240”,“channelCode”:“2”,“pageCode”:“020600”,“starsCount”:“1”}}'

http://111.20.119.234:8087/biz-activity/v1/stars/collect

curl -l -H “Content-type: application/json” -X POST -d ‘{“user_id”:“1000100000”,“user_name”:“13801100000”,“channel_id”:“1”,“action”:“2_1”}’ http://10.8.8.35:12525/mall-bean/reward

数据和接口

-H header 指定请求头参数

-I /–head 仅返回头部信息,使用HEAD请求

curl -l -H “Content-type: application/json” -X POST -d {“app_key”: “2581d03c21c4908d83ea4549bf3f7302”,

​ “province_id”: 891,

​ “city_id”: 891,

​ “cm_code”: [

​ “list_hot”,

​ “list_smart”,

​ “list_ads”

​ ]

} “http://shopapi.shop:10000/cm/getcmdata.json”

curl -H “Content-Type: application/json” -X POST --data ‘{“app_key”:“2581d03c21c4908d83ea4549bf3f7302”,“province_id”:891,“city_id”:891,“cm_code”:[“list_hot”,“list_smart”,“list_ads”]}’ ‘http://shopapi.test.shop:10000/cm/getcmdata.json’

注意:

以上方式获取到的数据是json格式的,使用json_decode函数解释成数组。

o u t p u t a r r a y = j s o n d e c o d e ( output_array = json_decode( outputarray=jsondecode(output,true);

如果使用json_decode($output)解析的话,将会得到object类型的数据。

你可能感兴趣的:(Curl)