PHP cUrl不遵循RedirectToAction

时间:2018-02-14 09:50:36

标签: c# php asp.net-mvc curl

我有2个应用程序,一个是PHP,另一个是用C#编写的.net MVC。 PHP应用程序将cURL HTTP POST请求发送到MVC应用程序中的HttpPost操作。动作非常简单,但最后我有RedirectToAction('someGetAction'),它将请求重定向到同一个应用程序中的HttpGet动作。 MVC应用程序中的重定向按预期工作,通过各种工具(如Postman和定制工具)进行测试。但是,当我尝试使用cURL发送POST时,请求在RedirectToAction('someGetAction')步骤中超时。我可以调试后期操作很好,直到重定向到操作应该发生的点,然后什么也没发生。 任何想法可能是什么问题?

这是我的cURL:

<?php
$data = 'someData=someData';
$header = array(
                'Content-Type: application/x-www-form-urlencoded; charset=utf-8',
                'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0',
                'Content-Length: ' . strlen($data)
);

$ch = curl_init ();
curl_setopt($ch, CURLOPT_URL, 'http://mvcApplicationUrl');
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
$response = curl_exec($ch);

echo $response;
echo 'finished';

?>

1 个答案:

答案 0 :(得分:2)

你说

  

这个动作非常简单但最后却有了   RedirectToAction(&#39; someGetAction&#39;)将请求重定向到   HttpGet在同一个应用程序中的动作。

不,它实际上并没有这样做。

它的作用是使用&#34;位置&#34;向客户端发送HTTP 302响应。 HTTP标头,其中包含要重定向到的URL。

客户端可选决定向该网址发出新请求。 GUI浏览器通常会自动执行此操作,作为用户友好的功能。其他HTTP客户端(例如cURL)通常不会 - 如果您想要遵循重定向,您可以自己阅读标题信息并编写代码以对建议的URL发出新的请求。

此处记录了RedirectToAction的行为,提到了我上面描述的过程:https://msdn.microsoft.com/en-us/library/system.web.mvc.controller.redirecttoaction(v=vs.118).aspx以及标准302响应在此处一般描述:https://en.wikipedia.org/wiki/HTTP_302

无论如何,如果您打算从一个应用程序到另一个应用程序进行编程调用,那么最好在.NET端公开Web API控制器,这样应用程序就可以以机器友好的格式交换信息,例如作为JSON或XML,而不是试图通过浏览器处理为人类用户设计的GUI应用程序。