我有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';
?>
答案 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应用程序。