获取 请求数据
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”头的字符串
CURLOPT_USERAGENT
curlopt_useragent
在HTTP请求中包含一个”user-agent”头的字符串
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
如果你想把一个头包含在输出中,设置这个选项为一个非零值, 返回值输出头信息
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参数,用于打印更多信息,包括发送的请求信息,这在调试脚本是特别有用
-H:
header
-I
head 仅返回头部信息,使用HEAD请求
-X
指定请求方式 默认为GET
-d '{“name”:“zhansan”}'
HTTP POST方式传送数据
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 <name=string/file> | 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 <cert[:passwd]> | 客户端证书文件和密码 (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 <name=content> | 模拟http表单提交数据 |
–form-string <name=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 <host[:port]> | 用socks4代理给定主机和端口 |
–socks5 <host[:port]> | 用socks5代理给定主机和端口 |
–stderr | |
-t/–telnet-option <OPT=val> | Telnet选项设置 |
–trace | 对指定文件进行debug |
–trace-ascii | Like --跟踪但没有hex输出 |
–trace-time | 跟踪/详细输出时,添加时间戳 |
-T/–upload-file | 上传文件 |
–url | Spet URL to work with |
-u/–user <user[:password]> | 设置服务器的用户和密码 |
-U/–proxy-user <user[:password]> | 设置代理用户名和密码 |
-w/–write-out [format] | 什么输出完成后 |
-x/–proxy <host[:port]> | 在给定的端口上使用HTTP代理 |
-X/–request <command> | 指定什么命令 |
-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类型的数据。