2010-03-12 242 views
1

我有一个只接受POST请求的托管脚本。 例如,some.hosted/script.phpphp将GET请求转换为POST请求

我怎样才能设置另一个简单的PHP,可以接受GET请求,然后将其POST到托管脚本。 这样我就可以建立一个这样的链接:other.site/post2hostedscript.php?postthis=data 然后POST postthis = data到托管脚本。

TNX

编辑: post2hostedscript.php不给任何结果。 结果将直接转到some.hosted/script.php ,就好像用户直接在托管脚本上进行POST一样。

+0

这个脚本应该在GET请求之后返回什么? POST后的另一个脚本的响应? – 2010-03-12 12:00:43

+0

为什么简单的array_merge($ _ POST,$ _GET)不起作用?然后你可以调用我想要的任何脚本。不知道是否有任何迫在眉睫的问题。 – pinaki 2010-03-12 12:09:33

+0

不是一个好主意。GET和POST的意思是分开的,以便用户代理知道他们在按照链接或发布表单时所做的事情,即遵循链接不应有副作用并多次发出GET请求应该与发布一次具有相同的效果。 – 2010-03-12 12:21:51

回答

1

看看“卷曲”功能,它们提供您需要的一切。

3

post2hostedscript.php则要:

  • 取所有收到的参数,如GET
  • 构建一个POST查询
  • 发送
  • 和可能,返回POST请求的结果。


这大概可以使用curl来完成,例如;这样的事情应该让你开始:

$queryString = $_SERVER['QUERY_STRING']; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.othersite.com/post2hostedscript.php"); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $queryString); 
curl_exec($ch); 
curl_close($ch); 

有关可卷曲使用的选项的列表,你可以看看的curl_setopt页面。


在这里,你将不得不使用,至少:

  • CURLOPT_POST:只要你想发送POST请求,而不是GET
  • CURLOPT_RETURNTRANSFER:这取决于你是否要curl_exec返回请求的结果,或仅输出它。
  • CURLOPT_POSTFIELDS:将发布的数据 - 即您在传入请求的查询字符串中所拥有的数据。

并注意从POST请求的响应可能包括一些有趣的HTTP头 - 如果需要的话,你就必须来接他们(见CURLOPT_HEADER选项),并重新发送有趣的你自己的回复(见header函数)

+1

注意虽然GET数据的大小不应超过1024字节,并且文件上传是不可能的。 – 2010-03-12 12:07:18

+0

@Pekka:关于文件上传的权限,以及GET *的大小限制(尽管我会说限制高于1k;我会在某些浏览器上说2k,在其他一些浏览器上说2k)? – 2010-03-12 12:11:26

+2

@Pascal && @Pekka:看看http://www.boutell.com/newfaq/misc/urllength.html - 无论如何,我个人认为1024字节以上的东西太长。 – dbemerlin 2010-03-12 12:14:34

-1

您可能会考虑将旧脚本中的所有$ _POST实例替换为$ _REQUEST,这会导致它同时接受GET和POST。