<?php
//post.php $flag = 0;
$post = '';
$errno = '';
$errstr = '';
$header = '';
//要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",80,$errno,$errstr) or exit($errstr."--->".$errno); //构造post请求的头
$header .= "POST /getpost.php HTTP/1.1\r\n";
$header .= "HOST:127.0.0.1\r\n";
$header .= "Referer:/heka4/getpost.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";/* var_dump($header);*/ //发送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);?><?php
//getpost.php
echo "this is the data posted";
echo "<pre>";
print_r($_REQUEST);
echo "</pre>";
?>这个是我原来在网上找的,你把对应的部分改一下,看看可以用不。我本地测试正常
下面是我自己常拿来用的post方法,依次传入url,要传输的数据(数组形式),需要登陆的话需要提供一个cookie,第四个参数如果有需要需要填入访问来源页,第五个只是测试的时候拿来看的,设置是否显示post数据给你看。 function postto($url,$fields_post,$cookie,$refer='',$re=1)
{
$fields_string = '';
foreach($fields_post as $key => $value)
{$fields_string .= $key . '=' . $value . '&';}
$fields_string = rtrim($fields_string , '&');
if($re==1)
{
echo $fields_string;
} $ch = curl_init($url);
$headers_login = array(
'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0',
);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers_login);//一个用来设置HTTP头字段的数组。
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);//连接结束后保存cookie信息的文件。
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);//全部数据使用HTTP协议中的"POST"操作来发送。要发送文件
curl_setopt($ch, CURLOPT_REFERER, $refer); $result= curl_exec($ch);
return $result;
curl_close($ch);
}
$header= array(
'Host: www.tv373.com',
'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language' => 'zh-cn',
'Pragma' => 'no-cache',
'User-Agent'=>'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko)',
'Content-Type' => 'application/x-www-form-urlencoded;charset=GBK',
'Referer' => 'http://www.tv373.com/weixinsite/main/wenjuan.show.php?id=7&ucode=o0Fm6jnHRJvmSEM8fpYGS7N_3fNU',
'Cookie' => 'PHPSESSID=oo7cl8oi9pa4ktcdv71tilhuo1',
'Connection' => 'keep-alive',
'Origin' => 'http://www.tv373.com',
'Accept-Encoding' => 'gzip, deflate',
);
$data = 'selid%5B%5D=440&submit=+%CC%E1+%BD%BB+';
echo $data.'<br>';
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $voteurl); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_HTTPHEADER, $$header);
curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
$response = curl_exec($curl); // 执行操作
//echo $response;
if (curl_errno($curl)) {
return false;
}
curl_close($curl); // 关闭CURL会话
if (strexists($response, '投票成功')) {
echo '投票成功<br>';
}
else{
echo '投票失败<br>';
}
Host: www.tv373.com
Accept-Language: zh-cn
Pragma: no-cache
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D201 MicroMessenger/5.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: http://www.tv373.com/weixinsite/main/wenjuan.show.php?id=7&ucode=o0Fm6jnHRJvmSEM8fpYGS7N_3fNU
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Cookie: PHPSESSID=oo7cl8oi9pa4ktcdv71tilhuo1
Connection: keep-alive
Content-Length: 38
Origin: http://www.tv373.com
Accept-Encoding: gzip, deflateselid%5B%5D=440&submit=+%CC%E1+%BD%BB+这个是抓的包
'User-Agent'=> 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D201 MicroMessenger/5.3',
'Content-Type' => 'application/x-www-form-urlencoded',
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers_login);//一个用来设置HTTP头字段的数组。但是不管如何设置,对方都给我返回
<body>
<div class="errorbg"><img src="../images/errorbg.jpg"></div>
<div class="tu"><img src="../images/errortouxiang.png"><div class="msg">本活动仅支持微信访问!浏览器类型不对非微信浏览器访问,你可能改变了打开页面的默认浏览器!</div></div>
</body>
$param = array(
CURLOPT_URL => 'http://www.tv373.com/weixinsite/main/wenjuan.show.php?act=sub&id=7&ucode=o0Fm6jnHRJvmSEM8fpYGS7N_3fNU',
CURLOPT_USERAGENT => 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D201 MicroMessenger/5.3',
CURLOPT_REFERER => 'http://www.tv373.com/weixinsite/main/wenjuan.show.php?id=7&ucode=o0Fm6jnHRJvmSEM8fpYGS7N_3fNU',
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => 'selid[]=440&submit=+%CC%E1+%BD%BB+',
CURLOPT_RETURNTRANSFER => true,
// CURLOPT_COOKIE => 'PHPSESSID=oo7cl8oi9pa4ktcdv71tilhuo1',
CURLOPT_COOKIEFILE => $cookiejar,
CURLOPT_COOKIEJAR => $cookiejar,
);
$ch = curl_init();
curl_setopt_array($ch, $param);
$s = curl_exec($ch);
curl_close($ch);echo $s;
问下版主,为何这种不成功$headers_login = array('User-Agent'=> 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_2 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A4449d MicroMessenger/5.0.1',
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers_login);
if (strexists($html, '已经投过票')) {
echo '已经投过票';
}
怎么一点反应都没,$s 是什么类型的,我想把他转为字符串怎么做?