设为首页 收藏本站
查看: 468|回复: 0

[经验分享] php模拟POST/GET操作及社区开放接口的简单实现

[复制链接]

尚未签到

发表于 2015-8-24 13:37:07 | 显示全部楼层 |阅读模式
  去年参加php面试,有一道题要求使用php的socket函数模拟post,当时对这个很模糊,所以没有答上来。最近一段时间正在开发social game(社区游戏),发现需要使用post请求的地方比较多,所以给自己总结总结,方便以后使用的时候便于查询。
  
  看一下需要使用的工作场合:为了便于第三方的应用使用facebook的功能,facebook提供了一系列的接口;例如,获取个人用户的信息,获取好友信息,向自己的空间发送feed(动态信息),邀请好友以及一些社区插件。通常情况下,facebook已经将它提供的接口做封装,我们在使用的时候,只要下载这个客户端的库,调用里面的函数就可以获得相应的功能。如果它没有提供客户端的类库,我们就要自己封装,就需要通过访问facebook的接口文件来获得相应的数据。这里举一个获取好友信息的操作。
  facebook的接口地址为 :http://api.facebook.com/restserver.php
  所以我们需要通过程序POST/GET请求,并获得结果。对于facebok对请求验证等工作这里暂且不谈,我们关注请求怎么样通过请求实现。
  简单的代码如下所示:

$url_with_get= "http://api.facebook.com/restserver.php?method=facebook.friends.get&session_key=&api_key=1232121311&v=1.0";
$post = array('sig'=>12312123234353);

首先检测环境中是否安装curl库,如果安装了则使用curl函数实现请求:
if(function_exists('curl_init'))
{
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url_with_get);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $result = curl_exec($ch);
  curl_close($ch);
}
else
{ //使用文件流的方式访问
  $content = http_build_query($post)
  $content_length = strlen($content);
  $context =
        array('http' =>
              array('method' => 'POST',
                    'user_agent' => $user_agent,
                    'header' => 'Content-Type: ' . $content_type . "\r\n" .
                                'Content-Length: ' . $content_length,
                    'content' => $content));
    $context_id = stream_context_create($context);
    $sock = fopen($url_with_get, 'r', false, $context_id);
  $result = '';
    if ($sock)
  {
  while (!feof($sock))
          $result .= fgets($sock, 4096);
        fclose($sock);
    }
    return $result;
  }
}
在使用CURL的时候,设置CURLOPT_RETURNTRANSFER这个值,主要作用是将返回的结果保存到变量中。
下面的一种方式是将访问转化为普通的文件流来操作。除了使用stream_context_create这个函数外,我们还可以使用fsocketopen这个函数来访问,具体的代码很多,大家
可以在网络上找找。
下面讨论另外一个主题:像facebook这个的社区是如何提供这样的接口的呢?也就说这些接口是怎么样实现的
对于我们第三方的开发者,我们不关心内部的具体实现,只要你能根据我们提供的参数返回正确的格式化的数据即可。所以facebook要做得也就是验证第三方开发者的参数,根据
相关的内容调用相应的接口,然后将结果组织成为xml或者json格式。
作为一个社区,facebook本身的好友处理的接口很完善,本人也开发过社区,知道里面好友作为社区的核心功能之一,接口很多。那么提供给外部使用的时候只要稍加封装就可以啦。
那么这样的接口的任务就主要落在验证请求是否合法,防止不良请求造成用户数据的泄漏,以及做一个良好的接口架构,根据不同的参数调用不同的接口。
restserver.php
.......
try
{
validate($params);
dispatch($method);
}
catch(Exception $e)
{
}
验证调用的合法性,不合法则抛出相应的异常,然后根据用户的请求接口,调用相关的函数处理:例如我们上面调用的获取好友信息的接口,就调用facebook里面 的friend接口
返回好友信息。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103536-1-1.html 上篇帖子: php标签云制作——数据表的结构和查询方法 下篇帖子: PHP正则表达式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表