Re: PHP cURL实现模拟登录与采集使用方法详解教程

添加时间:17-06-29 所属分类:PHP工具与代码
  十一、发送与获取json数据
发送json数据,在控制台中的表现主要如图(七)所示:
ajax发送json的控制台信息
第一条发送的是json格式的数据,
第二条发送的是以\n分割的数据,
第三条发送的是以&分割的数据。
这个在ajax请求的时候,只需要添加contentType参数即可,如:

[code] var data = ["name:Zjmainstay", "website:http://www.zjmainstay.cn"];
$.ajax({
url: 'http://test.com/curl/testPostJsonData.php',
type: 'post',
data: data.join("\n"),
contentType: 'text/plain',
success: function(result) {
console.log(result);
},
error: function(msg) {
console.log(msg);
}
});
[/code]
对于这类发送json数据的请求,复制cURL命令时,你会发现其中根本没有发送数据,如:

[code] curl 'http://test.com/curl/testPostJsonData.php' -X POST -H 'Accept: */*' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3' -H 'Cache-Control: max-age=0' -H 'Connection: keep-alive' -H 'Content-Length: 48' -H 'Content-Type: text/plain' -H 'Cookie: __utma=99889051.942646074.1467634856.1467634856.1467636947.2' -H 'Host: test.com' -H 'Referer: http://test.com/curl/ajaxJsonData.html' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:47.0) Gecko/20100101 Firefox/47.0' -H 'X-Requested-With: XMLHttpRequest'[/code]

对于这种数据,我们要用PHP cURL模拟发送的话,需要发送相应的header参数,示例:

[code] #json数据
$url = 'http://test.com/curl/testPostJsonData.php';
$data = '{"a":"b"}';
$length = strlen($data);
$header = array(
'Content-Length: ' . $length, //不是必需的
'Content-Type: text/json',
);
$ch = curl_init($url); //初始化curl
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$content = curl_exec($ch); //执行并存储结果
curl_close($ch);
echo $content;
#\n分割数据
$data = [
'name:Zjmainstay',
'website:http://www.zjmainstay.cn',
];
$data = implode("\n", $data);
#&分割数据
$data = 'name:Zjmainstay&website:http://www.zjmainstay.cn';[/code]

对于$.ajax我们常常会使用这种写法来指定返回json格式数据:

[code] $.ajax({
url: url,
dataType: 'json',
...
});[/code]

我们会发现,cURL请求头Accept:部分会多出一些参数:

[code] -H 'Accept: application/json, text/javascript, */*; q=0.01'[/code]

因此,如果需要指定返回内容作为json格式,我们就需要指定application/json格式。

那么,对于这种给服务器端发送json数据的程序,服务器端是怎么得到请求数据的呢?
如果你们做过尝试,一定会发现此时$_POST是空的,我们要使用php://input进行数据获取,示例:

[code] $postData = file_get_contents('php://input');[/code]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

前篇:PHP curl函数模拟爬虫(操作cookie) 后篇:cURL、file_get_contents、snoopy.class.ph...
发表我的评论


推荐文章   按摩穴位就可以缓解心绞痛   英国建造婴儿专属游泳池 宝贝水中秀泳姿...   女科学家生存实录:记不得上次逛街是什...   俄4岁小女孩零下34度徒步8公里救外婆,...   85岁老教授新编《济南方言研究》:她比...
随机文章   php不错的验证码   PHP上传文件代码,仅适合初学者,代码简洁...   install.php简单制作   PHP中UBB的使用   mysql中engine=innodb和engine=myisam的...
广告

其他推荐

因为本站所有内容均转载自其它媒体,本意为公众提供免费服务,但并不代表本网赞同其观点,也不能对其真实性验证负责,如稿件版权单位或个人不想在本网发布,请与我联系,本人会立即将其撤除,谢谢.联系方式:atseashawk@163.com QQ:99289555