QQ推荐的是curl方法,推荐的SDK里用的也是。不过curl是PHP的扩展库,需要另外安装,而调用curl,会牵扯到curl_exec函数,这个函数允许远程执行命令,如果服务器不允许执行curl_exec的话,那么用curl调用QQ的API就是空谈,这时候就需要用到别的方法来实现POST请求。
fsockopen要比curl复杂一点,它是直接用fputs或fwrite写HTTP请求的数据流,而curl已经把所有的内容的封装起来了。
①,第一步是链接到API服务器,值得注意的是,http请求和https请求端口和写法是不一样的。
http的话,是:
$fp = fsockopen('http://'.$host, 80, $errno, $errstr, 20);
https的话,是:
$fp = fsockopen('ssl://'.$host, 443, $errno, $errstr, 20);
$errno如果是0的话,表示请求主机$host失败。
因为要链接的是QQ的API,这里$host是"graph.qq.com", 用第二个HTTPS请求。具体的参照API文档。
②,然后是用fputs写POST请求包。用发送微博add_t请求为例:
$body = http_build_query($params);
$out = "POST /t/add_t HTTP/1.1 \r\n"
."Host: $host\r\n"
."Content-Type: application/x-www-form-urlencoded\r\n"
.'Content-Length: '.strlen($body)."\r\n"
."Connection: close\r\n"
."Cache-Control: no-cache\r\n\r\n";
."$body";
fputs($out);
POST数据包的格式有几点需要注意
- 分行要用"\r\n",而且一定要用双引号。
- body前面的一行,要用两个\r\n
- Content-Length的值一定要包含整个body的长度,$body之后不能再有别的字符串。这个在新浪微博API调用的时候不会有问题,但是QQ的API一定会报错。
- QQ文档里的POST请求示例上有个错误,Connection应该是close,而不是Keep Alive。有兴趣的可以试试Keep Alive,这个值在读取返回值的时候,会让你后悔的。
③,发完数据流,就可以用fgets或fread读取结果了。需要注意的是,fgets是一行一行的读取结果,而fread是按定义的长度读取返回结果。显然,fread要更快一点。
while(!eof($fp)){
$result.= fread($fp, 1024);
}
④,然后就是处理返回结果,返回结果和发出的post数据包是很像的,要的是body部分,所以,直接截取第一个\r\n\r\n之后的数据就对了。
分享到:
相关推荐
本文实例讲述了php使用fsockopen函数发送post,get请求获取网页内容的方法。分享给大家供大家参考。 具体实现代码如下: 复制代码 代码如下:$post =1; $url = parse_url($url); $host =’//www.jb51.net’; $path ...
fsockopen get/post 表单及上传文件例子。
全面的基于fsockopen的HTTP请求功能,支持GET、POST、POST with file、raw POST、POST with指定IP等。 post_to_host.php 用 fsockopen 替换 curl: 变量前缀解释: 'arr' means any array, such as: array('var1...
使用php可以模拟post和get传送数据到别的网页或者是站点,那么怎么传送数据呢?下面由小编给大家介绍利用PHP fsockopen 模拟POST/GET传送数据的方法,需要的朋友一起看看吧
fsockopen用法.txt
fsockopen 伪造 post和get方法哦,如果你正在找 伪造 post和get方法的php处理代码这款不错哦。复制代码 代码如下:<?php//fsocket模拟post提交$purl = “http://localhost/netphp/test2.php?uu=rrrrrrrrrrrr”;...
php异步请求,fsockopen实现,亲测可用,分别包含get和post两个方法用于get和pos请求
php利用fsockopen GET/POST提交表单及上传文件,具体内容如下 1.GET get.php <?php $host = 'demo.fdipzone.com'; $port = 80; $errno = ''; $errstr = ''; $timeout = 30; $url = '/socket/getapi.php'; $...
实现PHP Cron,也就是PHP定时任务,通过本地文件记录schedules,然后通过fsockopen实现非阻塞式的后台访问对应的url来实现定时任务,通过sleep实现定时,如果错过任务,则通过用户访问来执行该任务 文件目录 cron ...
主要介绍了php发送get、post请求的6种方法简明总结,分别为使用file_get_contents 、fopen、fsockopen、curl来发送GET和POST请求,需要的朋友可以参考下
下面小编就为大家带来一篇php异步:在php中使用fsockopen curl实现类似异步处理的功能方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
2 利用fsockopen模拟post 无curl也可使用 3 填入accesskey secretkey及相册ID即可使用 4 可获取对应相册指定页随机一张图片的地址 5 最终图片地址可用于背景图片显示等 ">0 随机获取贴图库 tietuku com 某一相册...
fsockopen是对socket客户端代码的封装,该函数中封装了socket_create,socket_connect。服务器端代码:server.php复制代码 代码如下:<?phperror_reporting(E_ALL);set_time_limit(0);$address = ‘127.0.0.1’;$...
Requests提供了一致的API,并且使用cURL或fsockopen(具体取决于可用性),它还简化了发送请求,接受HEAD、GET、POST、PUT、DELETE或PATCH并且添加标头、表单数据和多个部分组成的文件。其次,该库还适用于国际域名...
下载此文件,解压并上传到网站源码根目录。然后访问这个文件【例如您网站的源码是直接放在abc.com的根目录,则访问http://abc.com/pfsockopen.php】,直接点【开始执行替换操作】,即可。
Requests提供了一致的API,并且使用cURL或fsockopen(具体取决于可用性),它还简化了发送请求,接受HEAD、GET、POST、PUT、DELETE或PATCH并且添加标头、表单数据和多个部分组成的文件。其次,该库还适用于国际域名...