php curl携带 cookie 请求

<?php
header('Content-Type:text/html;charset=utf-8');
echo  "<pre>";

function curl($cookie,$user_agent,$destURL, $paramStr='',$flag='get',$ip='10.57.22.151',$fromurl='http://www.baidu.com'){
	$curl = curl_init();
	if($flag=='post'){//post传递
		curl_setopt($curl, CURLOPT_POST, 1);
		curl_setopt($curl, CURLOPT_POSTFIELDS, $paramStr);
	}
	curl_setopt($curl, CURLOPT_URL, $destURL);//地址
	
	curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:'.$ip, 'CLIENT-IP:'.$ip));  //构造IP
	
	
	curl_setopt($curl, CURLOPT_REFERER, $fromurl);
	curl_setopt($curl, CURLOPT_TIMEOUT, 10);#10s超时时间
	
	curl_setopt ($curl, CURLOPT_USERAGENT, $user_agent);
	//curl_setopt ($curl, CURLOPT_COOKIEJAR, $cookie);
	curl_setopt ($curl, CURLOPT_COOKIEFILE, $cookie);
	
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	$str = curl_exec($curl);
	curl_close($curl);
	return $str;
}

	
	$postdata = 'a=11111111111';
	$user_agent = "Mozilla/5.".rand(0,100)." (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0";
	$cookie = 'd:\cookie.txt';
	$getip='66.66.'.rand(0,16).'.'.rand(0,158) ;
	//file_put_contents('d:\cookie.txt', '');
	$cookie_file = dirname(__FILE__).'/cookie.txt';
	ob_start();
	$html =  curl($cookie_file,$user_agent,'http://127.0.0.50/b.php',$postdata,'post',$getip,'');
	ob_end_clean();
	
	echo $html;
	
	

cookie 文件 

127.0.0.50	FALSE	/	FALSE	1418875953	aaaa	cccc



### 回答1: PHP Curl可以通过设置Cookie来发送POST请求。设置Cookie可以使用curl_setopt函数中的 CURLOPT_COOKIE选项。具体的实现如下: ``` //初始化curl $ch = curl_init(); //设置url curl_setopt($ch, CURLOPT_URL, "http://example.com/post"); //设置POST请求 curl_setopt($ch, CURLOPT_POST, 1); //设置POST参数 $post_data = array( "name" => "foo", "age" => 20 ); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); //设置Cookie $cookie = "PHPSESSID=1234567890abcdef"; curl_setopt($ch, CURLOPT_COOKIE, $cookie); //执行curl $result = curl_exec($ch); //关闭curl curl_close($ch); echo $result; ``` 上面的代码中,设置了url和POST参数,并使用curl_setopt函数设置了Cookie,即在请求时附带了Cookie信息,从而实现了发送带Cookie的POST请求。 ### 回答2: PHP是一种无状态的编程语言,因此要在不同的页面之间共享信息,业界普遍采用cookie来实现。在使用PHPCURL模块向服务器提交POST请求时也需要使用cookie。下面我们来介绍如何使用PHP CURL POST cookie请求。 首先,我们需要明确一点,就是使用cookie实现POST请求时需要先获取cookie,然后再将cookie携带在POST请求中一并提交,否则服务器无法验证请求的合法性。 获取cookie 假设需要POST请求的页面是http://www.example.com/login.php,我们使用如下代码获取cookie: ``` $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://www.example.com/login.php'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, true); $data = curl_exec($curl); curl_close($curl); $cookie_start = strpos($data, 'PHPSESSID=') + 10; $cookie_end = strpos($data, ';', $cookie_start); $cookie = substr($data, $cookie_start, $cookie_end - $cookie_start); ``` 上面的代码使用了CURLCURLOPT_HEADER选项来获取服务器返回的HTTP头信息,然后从头信息中提取出cookie值。上面的代码还使用了CURLOPT_RETURNTRANSFER选项来将返回的结果作为字符串返回,而不是直接输出。这个过程可以根据实际情况进行调整。 提交POST请求 接下来,我们使用如下代码提交POST请求,并携带上面获取的cookie: ``` $post_data = array( 'username' => 'admin', 'password' => 'password', ); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://www.example.com/login.php'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_COOKIE, 'PHPSESSID=' . $cookie); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post_data)); $result = curl_exec($curl); curl_close($curl); ``` 上面的代码首先创建了一个POST请求,然后使用CURLOPT_COOKIE选项将cookie携带请求中。这样,服务器就可以通过cookie验证请求的合法性了。最后,使用CURLOPT_POSTFIELDS选项将POST数据提交到服务器。上面的代码还使用了http_build_query函数将POST数据编码成URL格式。 总结 使用PHPCURL模块实现POST请求时,需要注意使用cookie验证请求的合法性。具体实现上,需要先获取cookie,然后将cookie携带在POST请求中一并提交。这样,服务器就可以正确地验证请求的合法性,从而完成POST请求的操作。 ### 回答3: PHP通过CURL来发送HTTP请求,实现POST请求携带cookie可以使用如下代码: ``` // 创建CURL $ch = curl_init(); // 设置请求URL curl_setopt($ch, CURLOPT_URL, 'http://example.com/api/login'); // 设置请求类型为POST curl_setopt($ch, CURLOPT_POST, true); // 设置POST参数 curl_setopt($ch, CURLOPT_POSTFIELDS, 'username=username&password=password'); // 设置cookie curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/cookie'); curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/cookie'); // 执行请求 $result = curl_exec($ch); // 关闭CURL curl_close($ch); ``` 其中, `CURLOPT_COOKIEJAR`选项用来保存cookie, `CURLOPT_COOKIEFILE`选项用来读取cookie。访问后续页面时,需要使用 `CURLOPT_COOKIEFILE`来携带cookie。 需要注意的是,在以上代码中,POST请求数据以字符串形式传递,需要使用 `urlencode()` 对参数进行编码。另外,cookie文件`/tmp/cookie`需要存在,如果不存在会自动创建。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值