【发布时间】:2011-09-15 15:43:33
【问题描述】:
已解决:问题属于内容类型。应该是
Content-Type: application/x-www-form-urlencoded
帮助链接:http://www.bradino.com/php/empty-post-array/
我似乎无法获得要发送的POST 数据。这个方法我已经梳理了一段时间,每次运行测试时,$_POST 数组都是空的。
$output = new SimpleXMLElement($xml);
$params = "method=updateOrder&xml=".$output;
$response = Rest::Post("example.com", 80, "/resource/path.php", $params);
上面是我静态调用的另一种方法,它使用所需的方法创建HttpRequest。下面是被子调用并传递相同数据但包括方法名称的方法。即:POST.
private static function httpRequest($host, $port, $method, $path, $params)
{
//Check method
if(empty($method))
$method = "GET";
$method = strtoupper($method);
//Port
if(empty($port))
$port = 80;
//Build Querystring
$data = "";
if(!empty($params) && $method == "GET")
foreach($params as $name => $value)
{
$data .= $name . "=" . urlencode($value) . "&";
}
if($method == "GET" && !empty($data))
$path .= "?" . $data;
//connection
$socket = fsockopen($host, $port);
if(!$socket)
die("Socket failed, no connection.");
//Write Data and headers to stream
fputs($socket, $method ." ". $path . " HTTP/1.1\r\n");
fputs($socket, "Host: " . $host . "\r\n");
if($method === "POST")
{
fputs($socket, "Content-type: text/xml\r\n");
fputs($socket, "Content-length: " . strlen($params) . "\r\n");
}
fputs($socket, "Connection: close\r\n\r\n");
//Write body
if($method === "POST")
fputs($socket, $params);
//Gets headers
$responseHeader = "";
do
{
$responseHeader .= fgets($socket, 1024);
}
while(strpos($responseHeader, "\r\n\r\n") === false);
//Gets body
$responseBody = "";
while(!feof($socket))
$responseBody .= fgets($socket, 1024);
//Done & return
fclose($socket);
return array(0=>$responseHeader, 1=>$responseBody);
}
【问题讨论】:
-
您是否收到错误消息或其他任何信息?您还知道 curl 或 http 扩展,或 PEARs HTTP_Request2 类吗? (如果您确实必须编写自己的 HTTP 处理程序,如果您不处理额外的缓存/传输编码功能,请将其声明为 /1.0。)
-
你有什么理由去 fsock 层而不是使用 file_put_contents+streams 或 curl?其中任何一个都可以以更少的痛苦完成同样的事情。
-
我设置了资源,该资源被调用以响应一些成功消息并转储帖子的内容。以下是响应:HTTP/1.1 200 OK 日期:2011 年 6 月 15 日星期三 15:29:16 GMT 服务器:Apache/2.2.14 (Ubuntu) X-Powered-By: PHP/5.3.2-1ubuntu4.9 变化: Accept-Encoding Content-Length: 23 Connection: close Content-Type: text/html 得到了帖子!数组 ( )
-
您是在尝试将帖子数据作为数组还是字符串发送?
-
此实现用于测试目的。最终我会碰到 cURL,但它目前没有启用。目前我正试图将数据作为字符串传递。