模拟post提交

利用php模拟提交一般会有两种socket connection和curl

这两种操作大同小异,只不过相比较来说curl更加直观一些,不像socket需要自己构造头信息,不过curl在64位windows下有些问题,以前没有注意,最近一次安装wamp server发现开启curl后,在apache的错误日志中会发现curl无法启动:

<b>Warning</b>:  PHP Startup: Unable to load dynamic library 'c:/wamp/bin/php/php5.3.13/ext/php_curl.dll' - 应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行 sxstrace.exe 工具。

 in <b>Unknown</b> on line <b>0</b><br />

这个原因应该是官方给出的版本并没有对64位做开发,找了几个64位的curl dll文件,我用的wamp server的线程安全版本,替换文件,搞定!只分享成功,不介绍资源地址的博主都是流氓,这里给出dll文件下载地址http://www.anindya.com/php-5-4-3-and-php-5-3-13-x64-64-bit-for-windows/,有时需要翻墙

 提供两个demo

 1    $url = "http://localhost/base.php";
 2     $tid = 30996033;            
 3     $data = "action=vote&tid=$tid";
 4     
 5     $header = array(
 6             'REMOTE_ADDR:8.8.8.9',
 7             'CLIENT-IP:8.8.8.9',
 8             'X-FORWARDED-FOR:8.8.8.9',
 9     );
10     
11     $ch = curl_init();
12     curl_setopt($ch, CURLOPT_URL, $url);
13     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
14     curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
15     $out = curl_exec($ch);
 1        $host = 'localhost';
 2             $path = '/base.php';
 3             $tid = 30996033;
 4             $data = "action=vote&tid=$tid";
 5             $ip = '8.8.8.8';
 6             $fp = fsockopen($host,80);
 7             if(!$fp)
 8             {
 9                     die('创建连接失败,检查主机地址或网络连接');
10             }
11             //构造http请求串
12             $send = "POST $path HTTP/1.1
";
13             $send .= "Host: $host
";
14             $send .= "Content-type: application/x-www-form-urlencoded
";
15             $send .= 'X-FORWARDED-FOR:8.8.8.8' . "
";
16             $send .= "CLIENT-IP:$ip
";//伪造IP
17             $send .= "REMOTE_ADDR:$ip
";//伪造IP,这句并不会发现变化,地址都是127.0.0.1也就是服务器地址,网上说是什么端口映射,难道和cgi什么的有关系?那端口也应该是9000啊,不懂
18             $send .= "Content-length: " . strlen($data) . "
";
19             $send .= "Connection: close

";
20             $send .= $data . "

";
21             fwrite($fp, $send, strlen($send));
22             $back = '';
23             while(!feof($fp))
24             {
25                 $back .= fread($fp, 1024);
26             }
27             fclose($fp);


 

原文地址:https://www.cnblogs.com/quinnxu/p/3151730.html