/**
* 函数介绍: 用于post方式提交数据
* 输入参数: 完整url, 数据
* 返回值 : 接口返回值
*/
function post_it($url, $data = '', $timeout = '6') {
$urls = parse_url($url);
if (!$urls) {
return "-500";
}
$port = isset($urls['port']) ? $urls['port'] : null; //isset()判断
if (!$port) {
$port = "80";
}
$host = $urls['host'];
//----------------------------------------------//
$httpheader = "POST " . $url . " HTTP/1.0" . "\r\n" . "Accept:*/*" . "\r\n" . "Accept-Language:zh-cn" . "\r\n" . "Referer:" . $url . "\r\n" . "Content-Type:application/x-www-form-urlencoded" . "\r\n" . "User-Agent:Mozilla/4.0(compatible;MSIE 7.0;Windows NT 5.1)" . "\r\n" . "Host:" . $host . "\r\n" . "Content-Length:" . strlen($data) . "\r\n" . "\r\n" . $data;
$fd = fsockopen($host, $port);
if (!is_resource($fd)) {
return "fsockopen failed";
}
fwrite($fd, $httpheader);
stream_set_blocking($fd, TRUE);
stream_set_timeout($fd, $timeout);
$info = stream_get_meta_data($fd);
$gets = "";
while ((!feof($fd)) && (!$info['timed_out'])) {
$data .= fgets($fd, 8192);
$info = stream_get_meta_data($fd);
@ob_flush();
flush();
}
if ($info['timed_out']) {
return "timeout";
} else {
//echo $data;
$contentInfo = explode("\n\n", str_replace("\r", "", $data)); if (!strstr($contentInfo[0], "HTTP/1.1 200 OK")) {
return -10;
}
return trim($contentInfo[1]);
}
}

/**
 * 函数介绍:    用于post方式提交数据
 * 输入参数:    完整url, 数据
 * 返回值  :    接口返回值
 */
function post_it($url, $data = '', $timeout = '6') {
    $urls = parse_url($url);
    if (!$urls) {
        return "-500";
    }
    $port = isset($urls['port']) ? $urls['port'] : null; //isset()判断
    if (!$port) {
        $port = "80";
    }
    $host = $urls['host'];
    //----------------------------------------------//
    $httpheader = "POST " . $url . " HTTP/1.0" . "\r\n" . "Accept:*/*" . "\r\n" . "Accept-Language:zh-cn" . "\r\n" . "Referer:" . $url . "\r\n" . "Content-Type:application/x-www-form-urlencoded" . "\r\n" . "User-Agent:Mozilla/4.0(compatible;MSIE 7.0;Windows NT 5.1)" . "\r\n" . "Host:" . $host . "\r\n" . "Content-Length:" . strlen($data) . "\r\n" . "\r\n" . $data;
    $fd = fsockopen($host, $port);
    if (!is_resource($fd)) {
        return "fsockopen failed";
    }
    fwrite($fd, $httpheader);
    stream_set_blocking($fd, TRUE);
    stream_set_timeout($fd, $timeout);
    $info = stream_get_meta_data($fd);
    $gets = "";
    while ((!feof($fd)) && (!$info['timed_out'])) {
        $data .= fgets($fd, 8192);
        $info = stream_get_meta_data($fd);
        @ob_flush();
        flush();
    }
    if ($info['timed_out']) {
        return "timeout";
    } else {
        //echo $data;
        $contentInfo = explode("\n\n", str_replace("\r", "", $data));
        
        if (!strstr($contentInfo[0], "HTTP/1.1 200 OK")) {
            return -10;
        }
        return trim($contentInfo[1]);
    }
}

php用fsockopen实现post提交数据并获得返回数据的更多相关文章

  1. 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用

    [源码下载] 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用 作者:weba ...

  2. 基于NIO的同步非阻塞编程完整案例,客户端发送请求,服务端获取数据并返回给客户端数据,客户端获取返回数据

    这块还是挺复杂的,挺难理解,但是多练几遍,多看看研究研究其实也就那样,就是一个Selector轮询的过程,这里想要双向通信,客户端和服务端都需要一个Selector,并一直轮询, 直接贴代码: Ser ...

  3. webservice一片:其中在外线呼叫数据,查看返回数据

    经Android数据被访问,返回的数据(json格公式,object数据类型:strJson) 业务需求:经webservice调用外部暴露数据并返回json数据序列化.阅读到数据库表:[SQ_Eve ...

  4. C#串口通信—向串口发送数据,同步接收返回数据

    最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...

  5. 【Android 复习】:从Activity中返回数据

    在实际的应用中,我们不仅仅要向Activity传递数据,而且要从Activity中返回数据,虽然返回数据和传递类似,也可以采用上一讲中的四种方式来传递数据,但是一般建议采用Intent对象的方式的来返 ...

  6. 【解决方案】客户端请求数据较大时,nginx返回数据被截断

    [问题描述]:客户端使用curl命令向nginx请求数据,当返回数据量较大时,数据被截断,客户端无法获取完整的数据. [问题原因]:nginx配置文件中包含了proxy_buffer_size.pro ...

  7. python3乱码问题:接口返回数据中文乱码问题解决

    昨天测试接口出现有一个接口中文乱码问题,现象: 1 浏览器请求返回显示正常 2 用代码请求接口返回数据中文显示乱码 3 使用的python3,python3默认unicode编码,中文都是可以正常显示 ...

  8. arttemplate模板引擎有假数据返回数据多层内嵌的渲染方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. aJax提交——服务端不能用request存储数据,session存数据客户端可以接收到

    aJax提交与普通提交是两种迥异的提交方式,这两种提交方式决定了客户端与服务端交互时存储.传输数据的方式也不同. aJax提交,客户端的请求数据存储在data中,服务端用request.getPara ...

随机推荐

  1. ajax 无刷新文件上传

    无废话,直接重点: 1:准备工作  需要4个js库 1.jquery 8以上版本 2.jquery.ui.widget.js 3.jquery.iframe-transport.js 4.jquery ...

  2. MVC4.0 WebApi如何设置api支持namespace

    1.自定义HttpControllerSelector /// <summary> /// 设置api支持namespace /// </summary> public cla ...

  3. 零基础学习Linux(二)网页乱码问题

    上次的博文零基础学习Linux(一)环境搭建中我们已经将Linux环境搭建完毕了,接下来我们就可以进行相关的操作了,在进行操作之前,我们先来看一下大家可能遇到的中文网页乱码问题. 1.问题演示 a)输 ...

  4. eclipse插件开发中全局对象的获取

    转自:http://blog.csdn.net/liaomin416100569/article/details/7165425 1.获取系统默认的ShellShell shell = Platfor ...

  5. UISwitch swift

    // // ViewController.swift // UILabelTest // // Created by mac on 15/6/23. // Copyright (c) 2015年 fa ...

  6. 利用while(code!=EOF){}来实现“无限”循环

    #include <stdio.h>int main(){    char a,b,c;    char t;    while(scanf("%c%c%c",& ...

  7. 与电子钱包相关的APDU指令

    CLS:命令报文的类别字节,class byte(类别字节) of command message(命令报文) UranusPay ED/EP: UranusPay是HB公司开发的COS,而ED是电子 ...

  8. 团队小组开发nabc分析

    我们团队开发的项目为:牛逼的手电筒 NABC模型: 1.N:现在每个人几乎走哪,干什么都会拿着手机,而现在年轻人晚上在外面的也不少,所以手机里安装一个手电筒的APP还是很有必要的. 2.A:这学期正在 ...

  9. hibernate3连oracle的各种坑。。

    坑一:驱动错误导致sql查询不了,升级驱动到最新版即可 2.通过构造函数封装数据时,如果报错无法实例化并且不是因为字段不对应导致的,可以试试把float改为Float之类的包装类

  10. 利用Shell命令获取IP地址

    一 :获取单个网卡的IPv4地址,方法如下: 方法一:$/sbin/ifconfig ethX | awk '/inet addr/ {print $2}' | cut -f2 -d ":& ...