利用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);