PHP post请求检索JSON
我想写一些简单的php代码,将发出一个post请求,然后从服务器检索JSON结果。 对我来说这似乎很简单,但下面的代码根本不打开连接。PHP post请求检索JSON
$port = 2057;
$path = "/validate/";
$request = "value1=somevalue&value2=somevalue&value3=somevalue";
$http_request = "POST $path HTTP/1.0\r\n";
$http_request .= "Host: $server\r\n";
$http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
$http_request .= "Content-Length: " . strlen($request) . "\r\n";
$http_request .= "\r\n";
$http_request .= $request;
$response = '';
if(false == ($fs = @fsockopen($server, $port))) {
die ('Could not open socket');
}
fwrite($fs, $http_request);
while (!feof($fs))
{
$response .= fgets($fs, 1160);
}
fclose($fs);
另外我试着用更简单的方法:
$handle = fopen('http://localhost:2057/validate/?'.$request, "r");
这些方法的
或
$response = file_get_contents('http://localhost:2057/validate/' . $request);
但都只是超时。
我想连接到我在Visual Studio中运行的开发服务器,所以我不确定这是否与超时/连接问题有关。
只要它们是用PHP构建的,就可以在这里打开任何建议。
这可能是简单的使用HTTP扩展写:http://fr.php.net/manual/en/function.http-post-data.php
我真的打赌,但是我们会分发这个,我们不能保证人们会有扩展,所以必须在核心PHP。 – Brian 2010-06-10 22:02:52
但是,您可以使用代码分发Pear模块;尝试查看HTTP_Request2,我使用它来提交POST请求并轻松检索数据;如果您有兴趣,我会在下面发布一些示例代码。 – 2010-06-11 02:36:53
有大量纯PHP HTTP处理程序,在那里,可能会更好地为您。
尝试PEAR's HTTP_Client或Zend_Http_Client,这两者都可以简单地与您的应用程序绑定。
如果您在编写自己的代码时遇到问题,请尝试使用streams。有一个comprehensive set of HTTP stream options可供选择。
尝试使用HTTP_Request2;它不是标准的PHP,但是你可以将它与你的应用程序一起分发,所以你不必担心它是否被安装。
以下是我用于将文档发布到转换服务器的类的片段;您可以发布任何您喜欢的内容,并以类似的方式获得结果。
$request = new HTTP_Request2('http://whereveryouwant:80/foo/');
$request->setMethod(HTTP_Request2::METHOD_POST)
->setConfig('timeout', CONVERT_SERVER_TIMEOUT)
->setHeader('Content-Type', 'multipart/form-data')
->addPostParameter('outputFormat', $outputType);
$request->addUpload('inputDocument', $inputFile);
$result = $request->send();
if ($result->getStatus() == 200) {
return $result->getBody();
} else {
return false;
}
您是否安装了telnet?如果不看一下[这里](http://www.leateds.com/2009/telnet-for-windows-vista-windows-7/)。尝试通过telnet连接到您的主机,以查看主机是否可到达,如果不是,则可能是防火墙问题。 – jigfox 2010-06-10 21:01:42
我可以在JS中编写类似的查询,并且无法访问主机,所以我不认为它是防火墙问题。 – Brian 2010-06-10 21:08:26
在第一个例子中,假设你没有复制$ server =“localhost”;? – 2010-06-11 00:33:59