创建php代理的问题

时间:2011-08-23 21:17:31

标签: php post proxy header get

我无法让这个工作:

<?php
    $url = 'http://someServer.com/save.asp?';

    $count = 0;

    foreach($_POST as $key=>$value) 
    {

        if( $count != 0 ) $url .= "&";

        $url .= urlencode($key).'='.urlencode($value);

        $count++;

    } 

?>
<html>
<head>
<meta http-equiv="refresh" content="0;url=<?php echo $url;?>">
</head>
<body>
</body>
</html>

如果我复制最终$ url字符串的输出并将其直接粘贴到浏览器中,则可以正常工作。

因此看起来$ url正确构建,但重定向存在一些问题。

//编辑

我想让这个工作:

<?php 


$str = '';

$count = 0;

foreach($_POST as $key=>$value) 
{
    if( $count != 0 ) $str .= "&";

    //$url .= urlencode($key).'='.urlencode($value);
    $str .= $key.'='.$value;

    $count++;
} 


$url = 'http://someDomain.com/acript.asp?'.$str; 


$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';

$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_URL,$url);
$result=curl_exec($ch);
var_dump($result);

?> 

我得到:错误请求

2 个答案:

答案 0 :(得分:1)

如果您希望这样做,而不依赖浏览器来请求页面,请删除所有HTML并添加:

print file_get_contents($url);

最后。如果这对您不起作用(并且由于某些原因可能无效),您将不得不使用 - http://php.net/manual/en/book.curl.php

另外,为了构建正确的URL,您不必自己迭代$ _POST,使用: http://php.net/manual/en/function.http-build-query.php

PS 无论你想做什么,这可能都是错误的解决方案。

答案 1 :(得分:0)

啊,你的cURL过于复杂,它使用cookie和标题来表明请求期待图像。 只需尝试这一点:

$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';

$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_URL,$url);
$result=curl_exec($ch);
var_dump($result);

如果这仍然不起作用,只需使用firebug查看浏览器发送的标题是什么并添加它们,如下所示:

$headers = array("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");

curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);