模拟post file的两种方法Snoopy & CURL
转自网络
其实snoopy底层用的也是curl,不过它没有使用php的外壳curl函数,直接调用linux系统的curl命令,不过归根到底都是调用libcurl。
模拟post 提交文件这里有2种方法,其中CURL是与同事一起调试的,在这感谢他~~
一种是snoopy,版本是1.2.4,代码如下:
**注意:snoopy中执行ssl时是使用curl的,而且是linux命令的curl非php的curl系列的函数;另外执行http是用的是fsockopen一系列的函数。
include 'Snoopy.class.php';
$snoopy = new Snoopy();
$serviceUrl = 'https://xxx.com/test.php';
$formvars["login"] = 'loginname';
$formvars["password"] = 'ASE325##$';
$formvars["email_col"] = 0;
$formvars["action_col"] = 1;
$postfiles["file"] = dirname(__FILE__) . '/mail.txt';//文件要带上路径
$snoopy->curl_path = '/usr/bin/curl';//注意你的linux里的curl路径
$snoopy->set_submit_multipart();//设定post方式
if ($snoopy->submit($serviceUrl, $formvars, $postfiles)) {
echo '<pre>' . htmlspecialchars($snoopy->results) . '</pre>';
} else {
echo "error fetching document: " . $snoopy->error . "\n";
}
另一种是PHP的CURL搞定,代码如下:
$email = '@'.dirname(__FILE__).'/email.txt';//注意一定要在文件路径前加@
$url = 'https://xxx.com/test.php';
$params = array('login' =>'loginname',
'password' =>'ASE325##$',
'file' => $email,
'email_col' => 0,
'action_col' => 1,
);
$scheme = parse_url($url, PHP_URL_SCHEME);
var_dump($scheme, $params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT , 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0;)');
curl_setopt($ch, CURLOPT_POST , count($params)) ;
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
//要注意https
if($scheme == 'https') {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
}
$content = curl_exec($ch);
$response = curl_getinfo($ch);
curl_close($ch);
var_dump($content, $response);
这里做个记录~~