我的第一个PHP程序(by quqi99)
作者:张华 发表于:2011-12-21
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明
做了个活,用java写好了接口,需要从php调一下,php转发吧,带cookie过去,转发返回的cookie,不要能转发附件。从来没搞过php啊,怎么办呢,现学现卖,折腾了半天,搞出这么个玩意,如下:
$header = array();
$cookies = null;;
array_push($header, "X-Forwarded-For: " . $_SERVER['REMOTE_ADDR']);
array_push($header, "X-Forwarded-Host: " . $_SERVER['HTTP_HOST']);
array_push($header, "X-Forwarded-Server: " . $_SERVER['SERVER_ADDR']);
foreach ( getallheaders() as $key => $value ) {
if ($key == "Cookie"){
array_push ($header, $key . ": " . $value);
$cookies = $value;
}
}
$postvars = array();
if (isset($_POST)) {
foreach ($_POST as $var => $val) {
$postvars[$var] = $val;
}
}
if (isset($_FILES)) {
foreach ($_FILES as $var => $val) {
if(file_exists($val['tmp_name'])){
$postvars[$var] = "@" . $val['tmp_name'];
$postvars['filename' . "[$var]"] = $val['name'];
}
}
}
$content = $this->curl($remoteUrl, '', '', $postvars, $header);
function curl ($url, $user, $pw, $postvars, $header, $isPost='1') {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
if ($isPost == '1') {
curl_setopt($ch, CURLOPT_POST, 1);
} else {
curl_setopt($ch, CURLOPT_POST, 0);
}
if ($postvars) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 4);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
if ($header) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
}
if ($user && $pw) {
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$user:$pw");
}
$http = curl_exec($ch);
if (curl_errno($ch)) {
// echo "Error: " . curl_error ( $ch );
}
curl_close($ch);
$response = preg_split("//r/n/r/n/", $http, 3);
if (strripos($response[0], "100 Continue")) {
$headers = preg_split("//r/n/", $response[1]);
$content = $response[2];
} else {
$headers = preg_split("//r/n/", $response[0]);
$content = $response[1];
}
for ($i = 0; $i < count($headers); $i ++) {
$header = explode(":", $headers[$i]);
switch ($header[0]) {
case "Transfer-Encoding":
# skip these header , the apache will reset it
continue;
case "Set-Cookie":
header($headers[$i], FALSE);
break;
default:
break;
}
}
return $content;
}