PHP的三种HTTP请求,php模拟post 提交

发布:2013-08-10 13:47   点击802次   评论:0

http://www.jb51.net/article/21092.htm

php 接口类与抽象类的实际作用

http://www.189works.com/article-44046-1.html

php模拟post行为代码总结(POST方式不是绝对安全)

---------------------------------

http://hi.baidu.com/stodbx2002/item/749b7e102a503d6d70d5e8ea

PHP的三种HTTP请求,php模拟post 提交

PHP的三种HTTP请求,php模拟post 提交

方法一:利用php的socket编程来直接给接口发送数据来模拟post的操作。

建立两个文件post.php,getpost.php

post.php内容如下:

<!--?php

$flag = 0;

$post = '''';

$errno = '''';

$errstr = '''';

//要post的数据

$argv = array(

''var1''=>''abc'',

''var2''=>''how are you , my friend??''

);

//构造要post的字符串

foreach ($argv as $key=>$value) {

if ($flag!=0) {

$post .= "&";

$flag = 1;

}

$post.= $key."="; $post.= urlencode($value);

$flag = 1;

}

$length = strlen($post);

//创建socket连接

$fp = fsockopen("localhost",81,$errno,$errstr,10) or exit($errstr."--->".$errno);

    //构造post请求的头

    $header  = "POST /flandy/getpost.php HTTP/1.1\r\n";

    $header .= "Host:127.0.0.1\r\n";

    $header .= "Referer:/flandy/post.php\r\n";

    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";

    $header .= "Content-Length: ".$length."\r\n";

    $header .= "Connection: Close\r\n\r\n";

    //添加post的字符串

    $header .= $post."\r\n";


    //发送post的数据

   fputs($fp,$header);

    $inheader = 1;

    while (!feof($fp)) {

        $line = fgets($fp,1024); //去除请求包的头只显示页面的返回数据

        if ($inheader && ($line == "\n" || $line == "\r\n")) {

             $inheader = 0;

        }

        if ($inheader == 0) {

          echo $line;

        }

    }

fclose($fp);

?>

getpost.php的内容如下

<!--?php

echo "this is the data posted";

echo "

";


print_r($_REQUEST);

echo "

";


?>

结果输出:

this is the data posted

Array(

[var1] => abc

[var2] => how are you , my friend??

)

方法二:

使用PHP的curl扩展或HttpClient.class.php类,这两个非常类似,下面简单的列出curl的实现代码。

两个文件post2.php和getpost2.php

post2.php的内容如下:

<!--?php

$psecode = ’NDE005’;

$website = ’www.baidu.com’;

$amt = 1;

$pwd = 123456;

$ch = curl_init();

$curl_url = "http://localhost:81/flandy/getpost2.php?web=" . $website .

"&pwd=" . $pwd . "&action=check&pseid=" . $psecode .

"&amt=" . $amt;

curl_setopt($ch, CURLOPT_URL, $curl_url);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不直接输出,返回到变量

$curl_result = curl_exec($ch);

$result = explode('','', $curl_result);

curl_close($ch);

print_r($result);

?>

getpost2.php的内容如下:

<!--?php

echo "returndata
";

echo "

";


print_r($_REQUEST);

echo "

";


?>

结果输出:

Array (

[0] => returndata Array(

[web] => ’wwwbaiducom’

[pwd] => 123456

[action] => check

[pseid] => ’NDE005’

[amt] =>

)

)

方法三:这个要借助第三方类库HttpClient可以到这里下载:http://scripts.incutio.com/httpclient/<?php

require_once ''HttpClient.class.php’;

$params = array(’web’ => ’www.baidu.com’,

’pwd’ => ’123456’,

’action’ => ’check’,

’pseid’ => ’NDE005’,

’amt’ => 1);

$pageContents = HttpClient::quickPost(’http://localhost:81/flandy/getpost3.php’, $params);

$result = explode(’,’, $pageContents);

print_r($result);

?>

补充:

HTTP请求常用方案有以下(友情提示:排列顺序只为所想起时的先后顺序并再无特别含义)

1.HttpClient

Version 0.9, Simon Willison April 6th 2003

http://scripts.incutio.com/httpclient/HttpClient.class.php

2.snoopy

Snoopy Snoopy 1.2.3 November 7, 2005

http://snoopy.sourceforge.net/

3.pear::http_client

1.1.0 (stable) was released on 2006-06-03

http://pear.php.net/package/HTTP_Client

4.curl or php_curl

5.wget

6.php_socket

前3个算是比较完整的类,所以后面的暂时不考虑了。

库的选择一般原则是找用的人多,更新持久的,因此 pear::http_client 一马当先,但这个必须是统筹在PEAR之下,因为要用到一些PEAR的辅助类,不是很适合单独使用,请回去等录用通知吧。这回合Snoopy 领先一步,但粗略一看核心文件Snoopy.class.php 体重38KB,再看 HttpClient 感觉是相当苗条了,核心文件 HttpClient.class.php 占地12KB,这回合 HttpClient 也得一分,不过最后更新日期让人看得心寒。

人气测试(pear::http_client友情出场):

1.Google Trends

结果:放弃。

因为 Snoopy 在某个世界实在太有名气了,而且"http client" 关键字也太含糊。

2.Google Code Search

规则:php + 包含类名的一行并用双引号括起来

HttpClient 100

http://www.google.com/codesearch ... class+HttpClient"

Snoopy 100

http://www.google.com/codesearch ... +"class+Snoopy"

pear::http_client 12 (还是请继续回去等通知吧)

http://www.google.com/codesearch ... "&btnG=Search

核心PK:

一般来说,php 的HTTP CLIENT都是通过PHP_CURL或者PHP_SOCKET来实现的,所以这局应该又是平手。

功能PK:

一般来说功能与体重成正比,所以 Snoopy 的给人的第一印象还是很令人得期待的。(考察未完成)


-->

关于 GitHub 导航 部门 反馈

提示:`/home.php`入口数据仅为演示功能,不构成任何交易凭证,也不承担相关风险和责任!

Copyright © 2011-2018 xxxxx.com All rights reserved.

Run:2.241/28.919(ms); 7(sql)/2.905(MB); comm:news/detail; Upd:2025-01-11 11:08:33