php使用fsockopen传送POST到別的URL并取得回应內容

如果不需要传送参数或是使用GET method传送可以直接使用fopen()或是file_get_contents()函式获得回应內容
但是如果需要不经过表单就送出POST给某URL就需要使用curl相关函式或是fsockopen()传送

curl的用法比较简单可以咕狗看看(但是php必须要先安裝curl才可以用),这边要讲的是fsockopen().

//接收POST參數的URL
$url = 'http://www.google.com';

//POST參數,在這個陣列裡,索引是name,值是value,沒有限定組數
$postdata = array(
'post_name'=>'post_value','acc'=>'hsin','nick'=>'joe');

//函式回覆的值就是取得的內容
$result = sendpost($url,$postdata);
 
function sendpost($url, $data){
//先解析url 取得的資訊可以看看http://www.php.net/parse_url
$url = parse_url($url);
$url_port = $url['port']==''?(($url['scheme']=='https')?443:80):$url['port'];
if(!$url) return "couldn't parse url";

//對要傳送的POST參數作處理
$encoded = "";
while(list($k,$v)=each($data)){
  $encoded .= ($encoded?'&':'');
  $encoded .= rawurlencode($k)."=".rawurlencode($v);
}

//開啟一個socket
$fp = fsockopen($url['host'],$url_port);
if(!$fp) return "Failed to open socket to ".$url['host'];

//header的資訊
fputs($fp,'POST '.$url['path'].($url['query']?'?'.$url['query']:'')." HTTP/1.0rn");
fputs($fp,"Host: ".$url['host']."n");
fputs($fp,"Content-type: application/x-www-form-urlencodedn");
fputs($fp,"Content-length: ".strlen($encoded)."n");
fputs($fp,"Connection: closenn");
fputs($fp,$encoded."n");

//取得回應的內容
$line = fgets($fp,1024);
if(!eregi("^HTTP/1.. 200", $line)) return;
$results = "";
$inheader = 1;
while(!feof($fp)){
  $line = fgets($fp,2048);
  if($inheader&&($line == "n" || $line == "rn")){
    $inheader = 0;
  }elseif(!$inheader){
    $results .= $line;
  }
}

fclose($fp);
return $results;
}

网站sjolzy.cn的几个短url

首先给自己扫盲。

1.什么是短网址服务

短网址(Short URL)服务,顾名思义,就是把一个原来比较长的网址缩短成一个比较短的网址。

2.为什么需要短网址报务

最容易想到的理由就是好记。但其实还有更具刚性的需求,有些情况下太长的网址给发布者造成困难,比如分享一个资源地址等等

3.应用短网址

使用短网址很简单:打开提供短url服务网站的页面,输入原来的目标网址,提交后得到短网址,此短网址即可代替原长网址使用。

例如我的域名sjolzy.cn生成短url就有下面三个

http://is.gd/eIlSt

http://bit.ly/bZ88Dd

http://cli.gs/qee4TU

就试了三个,不够... 短url短url还是没哥自己的域名短.... 

呵呵,纯属娱乐爽一下

使用jquery插件测试url链接是否有效及js ping url

jquery的ping插件://要用的需要明白代码及自己改些地方

(function($) {
    $.fn.ping = function(options) {
        var opts = $.extend({}, $.fn.ping.defaults, options);
        var stime = new Date().getTime();
        return this.each(function() {
            var ping, requestTime, responseTime ;
            var target = $(this);
            function ping(){
                $.ajax({url: opts.getUrl(target.html())+'/'+ Math.random() + '.html',  //设置一个空的ajax请求
                    type: opts.type,
                    dataType: 'html',
                    timeout: opts.timeout,
                    beforeSend : function() {
                        requestTime = new Date().getTime();
                    },
                    complete : function() {
                        responseTime = new Date().getTime();
                        ping = Math.abs(requestTime - responseTime);
                        $('#'+target.html().replace('.','_')).text(ping + opts.unit);
                        //target.text(ping + opts.unit);
                    }
                });
            }
            var etime = new Date().getTime();
            if(Math.abs(stime - etime)<opts.timeout){
                ping();  //无论如何都要执行一次
                opts.interval != 0 && setInterval(ping,opts.interval * 1000);
            }
        });
    };
    $.fn.ping.defaults = {
        type: 'GET',
        timeout: 10000,
        interval: 3,
        unit: 'ms',
        isUrl:function(url){    //验证url是否有效
           var strReg = "^((https|http)?://)?"
            + "(([0-9]{1,3}.){3}[0-9]{1,3}" //
            + "|" //
            + "([0-9a-z_!~*'()-]+.)*" //
            + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]." //
            + "[a-z]{2,6})" //
            + "(:[0-9]{1,4})?" //
            + "((/?)|" //
            + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
            var re=new RegExp(strReg);
            return re.test(url);
           },
        getUrl:function(url){    //保证url带http://
            var strReg="^((https|http)?://){1}"
            var re=new RegExp(strReg);
            return re.test(url)?url:"http://"+url;
        }
    };
})(jQuery);

 

js ping url:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>HTTP Ping</title>
<style>
html{height: 100%;overflow: hidden;}
body{background: #000;color: #C0C0C0;font-weight: bold;font-size: 14px;font-family: Lucida Console;height: 100%;margin: 0 0 0 5px;}
#divInput{height: 10%;}
#divContent{height: 90%;overflow: auto;}
#txtTimeout{width: 40px;}
button{    margin-left: 10px;}
</style>
</head>
<body>
<div id="divInput">
    <span>URL:</span>
    <input id="txtURL" type="text" />
    <span>Timeout:</span>
    <input id="txtTimeout" type="text" value="2000" />
    <input id="btnSwitch" type="button" value="Start" onclick="handleBtnClick()" />
    <hr/>
</div>
<div id="divContent"></div>
<script>
var intStartTime;
var objIMG = new Image();
objIMG.onload =
objIMG.onerror =
function(){
    /*
     * 有回应,取消超时计时
     */
    clearTimeout(intTimerID);
    if(!bolIsRunning || bolIsTimeout)
        return;
    var delay = new Date() - intStartTime;
    println("Reply from " +
            strURL +
            " time" +
            ((delay<1)?("<1"):("="+delay)) +
            "ms");
    arrDelays.push(delay);
    /*
     * 每次请求间隔限制在1秒以上
     */
    setTimeout(ping, delay<1000?(1000-delay):1000);
}
function ping(){
    /*
     * 发送请求
     */
    intStartTime = +new Date();
    intSent++;
    objIMG.src = strURL + "/" + intStartTime;
    bolIsTimeout = false;
    /*
     * 超时计时
     */
    intTimerID = setTimeout(timeout, intTimeout);
}
function timeout(){
    if(!bolIsRunning)
        return;
    bolIsTimeout = true;
    objIMG.src = "X:\\";
    println("Request timed out.");
    ping();
}
</script>
<script>
var $ = function(v){return document.getElementById(v)};
var arrDelays = [];
var intSent;
var bolIsRunning = false;
var bolIsTimeout;
var strURL;
var intTimeout;
var intTimerID;
var objBtn = $("btnSwitch");
var objContent = $("divContent");
var objTxtURL = $("txtURL");
objTxtURL.value = window.location.host;
function handleBtnClick(){
    if(bolIsRunning){
        /*
         * 停止
         */
        var intRecv = arrDelays.length;
        var intLost = intSent-intRecv;
        var sum = 0;
        for(var i=0; i<intRecv; i++)
            sum += arrDelays[i];
        objBtn.value = "Start";
        bolIsRunning = false;
        /*
         * 统计结果
         */
        println(" ");
        println("Ping statistics for " + strURL + ":");
        println("  Packets: Sent = " +
                intSent +
                ", Received = " +
                intRecv +
                ", Lost = " +
                intLost +
                " (" +
                Math.floor(intLost / intSent * 100) +
                "% loss),");
        if(intRecv == 0)
            return;
        println("Approximate round trip times in milli-seconds:");
        println("  Minimum = " +
                Math.min.apply(this, arrDelays) +
                "ms, Maximum = " +
                Math.max.apply(this, arrDelays) +
                "ms, Average = " +
                Math.floor(sum/intRecv) +
                "ms");
    }else{
        /*
         * 开始
         */
        strURL = objTxtURL.value;
        if(strURL.length == 0)
            return;
        if(strURL.substring(0,7).toLowerCase() != "http://")
            strURL = "http://" + strURL;
        intTimeout = parseInt($("txtTimeout").value, 10);
        if(isNaN(intTimeout))
            intTimeout = 2000;
        if(intTimeout < 1000)
            intTimeout = 1000;
        objBtn.value = "Stop ";
        bolIsRunning = true;
        arrDelays = [];
        intSent = 0;
        cls();
        println("Pinging " + strURL + ":");
        println(" ");
        ping();
    }
}
function println(str){
    var objDIV = document.createElement("div");
    if(objDIV.innerText != null)
        objDIV.innerText = str;
    else
        objDIV.textContent = str;
    objContent.appendChild(objDIV);
    objContent.scrollTop = objContent.scrollHeight;
}
function cls(){
    objContent.innerHTML = "";
}
</script>
</body>
</html>

标签: url, function, var, return, ping

兼容ie FF 多浏览器的js获取url参数

<script language="javascript" type="text/javascript">
//js获取url参数的function
function request(paras){
var url = location.href;   //url
var paraString = url.substring(url.indexOf("?")+1,url.length).split("&");  
var paraObj = {}   //参数组
for (i=0; j=paraString[i]; i++){  
paraObj[j.substring(0,j.indexOf("=")).toLowerCase()] = j.substring(j.indexOf
("=")+1,j.length);  
}  
var returnValue = paraObj[paras.toLowerCase()];  
if(typeof(returnValue)=="undefined"){  
return "";  
}else{  
return returnValue;  
}  
}
var theurl
theurl=request("url");
if (theurl!=''){
location=theurl
}
</script>

50个有用的PHP工具

 

调试工具

测试和优化工具

文档工具

安全工具

图形处理

代码优化

版本控制系统

有用的拓展,使用工具和类

  • SimplePie :PHP RSS 解析程序



  • HTML Purifier :可以用来移除所有恶意代码(XSS),而且还能确保你的页面遵循W3C的标准规范。
  • TCPDF :一个用于快速生成PDF文件的PHP5函数包。
  • htmlSQL :一个是你可以方便的对HTML和XML内容方便的使用类似SQL语句进行检索的PHP类。
  • The Greatest PHP Snippet File Ever (Using Quicktext for Notepad++)
  • Creole :用PHP5编写, 是一个基于真正意义的OO的层,API接口以JDBC为基础。
  • PHPLinq :用SQL语法操作PHP数组。
  • PHPMathPublisher:作者是一位法国中学数学老师。



  • phpMyAdmin :可以通过互联网在线控制和操作MySQL。
  • PHPExcel :相当强大的MS Office Excel 文档生成类库。
  • Phormer :一个轻量级,强大的PHP在线相册。
  • xajax PHP Class Library :一个开源的PHP 类库,用来构建WEB上的Ajax 程序。
  • PHP User Class :用户管理。
  • PHP-GTK :为了证明PHP是一种远远超越网络应用程序的有效的工具而开发的。使用PHP-GTK你可以建立独立的GUI(用户图形界面)应用程序。

在线工具和资源

  • Minify! :使用 PHP5 开发的用于合并压缩 js/css 文件的应用程序。合并压缩之后的结果可通过 HTTP gzip/deflate 及一些相关头,优化客户端缓存。


  • HTTP_StaticMerger:自动“合并”CSS和JavaScript文件。
  • PHP Object Generator :一个开源的PHP代码生成器。它能够为你的PHP4/PHP5应用程序生成简洁和可测试的面向对象代码。


  • gotAPI/PHP







  • koders :开放源代码搜索。
  • PECL :含有PHP 开发组提供的不同扩展库的信息。

浏览器中的工具(Firefox插件)

  • FirePHP :是基于Firebug的一个扩展,可以用来在Firebug的console中方便的输出php的调试信息又不影响php程序的正常运行。


  • phpLangEditor :是一个用来翻译各种PHP变数的工具.



  • PHP Lookup :是一个内置的搜索栏,以帮助您快速查找引用的PHP语法。
  • PHP Manual Search :一个方便的搜索栏,从您的Web浏览器中搜索官方PHP文档

PHP框架

  • Dwoo :一个PHP5 的模板引擎。
  • CodeIgniter :帮助你编写Web 应用程序的敏捷开源PHP 框架。



  • YII Framework 一个高性能的基于组件的PHP框架。
  • Solar



  • symfony :一个开源的PHP Web框架。目的是加速Web应用的创建与维护。
  • PEAR   
  • Propel :是一个适用于PHP5的OR映射(Object Relational Mapping)框架。它允许你使用对象代替SQL来读写数据库表格中的行。
  • {{macro}} template engine

  • Zend Framework :是一个开放源代码的PHP5 开发框架,可用于来开发web 程序和服务。
  • Qcodo :是一个适用于敏捷开发基于PHP5采用MVC架构与CRUD代码生成功能的框架。


  • SAJAX :Sajax 是一种制作 Ajax 应用程序的模块化方式,通过预定的、动态的函数调用,使得应用程序的开发过程更加平滑。
  • Smarty : 用PHP实现MVC开发模式的逻辑层和表示层的模板引擎。
  • CakePHP :是一个开源的PHP on rails的full-stack框架。


  • Savant2 :是一套直接使用PHP function,但是做了合理的限制的PHP模板引擎。
  • PHPSpec :PHPSpec是一个简单而直观的PHP框架。

IDEs 和 Editors

  • PHPEclipse :相当强大的一个Eclipse下开发PHP的插件,包括的功能有:PHP语法分析,调试,代码格式化,大纲视图,代码模板定制等。


  • PhpED :内部调试器。


  • phpDesigner :针对PHP 网页的编写所设计的程序。


  • Zend Studio :一个屡获大奖的专业PHP 集成开发环境,具备功能强大的专业编辑工具和调试工具,支持PHP语法加亮显示。


  • Aptana PHP :一个开源的IDE ,主要致力于浏览器端的开发。
  • PDT :一个开发工具框架,致力于在Eclipse平台之上提供一个功能完整的PHP集成开发环境。
  • VS.Php :通过安装这个插件,我们可以在Visual Studio .Net这个市场中最流行的IDE中编译、编辑、配置PHP程序。
  • PHPEdit :这款IDE软件提供用于突出语法显示、代码提示、代码识别,一个集成的PHP调试器以及一个帮助生成器工具。

补充资源

标签: url, IT, 工具, img