`
羽落窗前
  • 浏览: 107531 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

用fsockopen实现POST请求访问腾讯API

 
阅读更多

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之后的数据就对了。

 

 

分享到:
评论

相关推荐

    发送POST请求的三种方式的php类

    这里我们将详细探讨使用cURL、`file_get_contents`和fsocket三种方法来实现POST请求。 1. cURL(Client URL Library): cURL是PHP中最常用的方法,功能强大且灵活。cURL库提供了丰富的选项来定制HTTP请求,包括...

    php使用fsockopen函数发送post,get请求获取网页内容的方法

    本文实例讲述了php使用fsockopen函数发送post,get请求获取网页内容的方法。分享给大家供大家参考。 具体实现代码如下: 复制代码 代码如下:$post =1; $url = parse_url($url); $host =’//www.jb51.net’; $path ...

    fsockopen get/post 表单及上传文件例子

    使用`fsockopen`实现GET请求,你需要构建URL,包括查询字符串,然后将数据发送到服务器。以下是一个简单的GET请求示例: ```php $url = 'http://example.com/index.php?name=value'; $host = parse_url($url, ...

    php发送post请求的三种方法

    send_post()函数使用file_get_contents()结合流上下文来发送POST请求,request_by_socket()函数演示了如何使用Socket方式构建并发送POST请求,而request_by_curl()函数则展示了如何使用cURL库发送POST请求。...

    php实现模拟post请求用法实例

    ### 使用fsockopen模拟POST请求 fsockopen是一个PHP内置函数,用于打开一个socket连接到指定的服务器。可以用来模拟底层的HTTP请求,包括POST请求。这种方法相比前两者来说较为复杂,但同时也提供了更多的控制。 #...

    利用PHP fsockopen 模拟POST/GET传送数据的方法

    利用PHP的fsockopen函数可以模拟向其他网页或站点发送HTTP请求,具体来说,可以通过模拟POST和GET方法来传送数据。下面详细说明如何使用fsockopen函数来完成这一任务。 首先,要理解fsockopen函数是PHP中用于打开...

    post-to-host:全面的基于fsockopen的HTTP请求功能,支持GET、POST、POST with file、raw POST、POST with指定IP等

    全面的基于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...

    fsockopen用法.txt

    ### fsockopen函数详解 在PHP中,`fsockopen`是...通过合理使用该函数,可以轻松实现各种网络通信需求,包括HTTP请求、FTP操作等。理解其参数含义、返回值以及如何处理错误,对于开发高效可靠的网络应用程序至关重要。

    php fsockopen伪造post与get方法的详解

    在本文中,我们将详细探讨如何使用PHP的fsockopen函数来伪造HTTP的GET和POST请求。 首先,fsockopen函数的基本语法如下: ```php resource fsockopen ( string $hostname , int $port [, int &$errno [, string &$...

    php利用fsockopen GET/POST提交表单及上传文件

    `fsockopen`函数是PHP提供的一种低级网络通信接口,它允许开发者直接打开到TCP/IP端口的连接,从而实现HTTP的GET和POST请求。本文将详细介绍如何利用`fsockopen`进行GET和POST请求,以及如何处理文件上传。 1. GET...

    PHP中Http协议post请求参数

    使用`curl_init()`初始化一个cURL会话,`curl_setopt()`设置请求选项,如URL、POST数据、请求头等,然后用`curl_exec()`执行请求,最后`curl_close()`关闭会话。 ```php $ch = curl_init(); curl_setopt($ch, ...

    php异步:在php中使用fsockopen curl实现类似异步处理的功能方法

    当fsockopen不可用或不适用时,可以使用cURL库来实现类似的效果。cURL是另一个强大的工具,用于传输数据。在PHP中,我们可以使用cURL的各种选项来设置请求参数,例如: ```php function _curl($url) { $ch = curl_...

    php模拟POST提交的4种方法.pdf

    以下是使用fsockopen实现POST提交的示例: ```php $URL = 'http://xxx.xxx.xxx.xx/xx/xxx/top.php'; $post_data['clientname'] = "test08"; $post_data['clientpasswd'] = "test08"; $post_data['submit'] = ...

    PHP socket 模拟POST 请求实例代码

    在PHP中,使用sockets模拟POST请求可以通过fsockopen()函数来实现。fsockopen()函数用于打开一个网络连接到指定的服务器,并返回一个文件句柄,可以用来读写数据。通过这个文件句柄,我们可以发送HTTP协议规定的请求...

    淘宝API主动推送业务PHP调用接收案例

    在电子商务领域,淘宝API(Taobao API)是淘宝开放平台提供的一系列接口,允许开发者通过这些接口与淘宝系统进行交互,获取或更新数据,实现各种功能。本案例主要关注的是"淘宝API主动推送业务",特别是PHP语言如何...

Global site tag (gtag.js) - Google Analytics