我正在尝试编写一个php脚本来向网址发送http post请求。它似乎没有通过服务器没有收到它。有人可以帮忙吗?
<?php
function postXMLToURL ($server, $path, $xmlDocument) {
$xmlSource = $xmlDocument;
$contentLength = strlen($xmlSource);
//$fp = fsockopen($server, 80);
$fp = fsockopen($server,8080);
fwrite($fp, "POST $path HTTP/1.0\r\n");
fwrite($fp, "Host: $server\r\n");
fwrite($fp, "Content-Type: application/xml\r\n");
fwrite($fp, "Content-Length: $contentLength\r\n");
fwrite($fp, "Connection: close\r\n");
fwrite($fp, "\r\n"); // all headers sent
fwrite($fp, $xmlSource);
$result = '';
while (!feof($fp)) {
$result .= fgets($fp, 128);
}
return $result;
}
function getBody ($httpResponse) {
$lines = preg_split('/(\r\n|\r|\n)/', $httpResponse);
$responseBody = '';
$lineCount = count($lines);
for ($i = 0; $i < $lineCount; $i++) {
if ($lines[$i] == '') {
break;
}
}
for ($j = $i + 1; $j < $lineCount; $j++) {
$responseBody .= $lines[$j] . "\n";
}
return $responseBody;
}
$xmlDocument = new DomDocument($final_xml); //final_xml is my xml in a string
$result = postXMLtoURL("localhost", "/resources", $xmlDocument);
$responseBody = getBody($result);
$resultDocument = new DOMDocument();
$resultDocument->loadXML($responseBody);
header('Content-Type: application/xml');
echo $resultDocument->saveXML();
}
?>
答案 0 :(得分:0)
你需要学习如何帮助自己。
代码中没有错误检测 - 你应该至少在调用fsockopen后检查fp是否有效,因为首选应该有更多的错误检查。
另外,抓住wireshark之类的内容,看看你的代码生成了什么数据包。
下进行。
答案 1 :(得分:0)
你可以使用stream_context_create(); 一旦我写了一个php课程,欢迎你使用它。
<?php
class HTTPRequest
{
protected $url;
protected $method;
protected $headers;
protected $data = "";
protected $useragent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
public function __construct(){}
public function setHeaders($headers)
{
if(is_array($headers))
{
$this->headers = $headers;
return true;
}
return false;
}
public function get($request)
{
if(!$this->headers)
{
throw new Exception("Please set Headers");
}
$this->url = $request;
$this->method = "GET";
return $this->send();
}
public function put($request,$xml)
{
if(!$this->header)
{
throw new Exception("Please set Headers");
}
$this->url = $request;
$this->method = "PUT";
$this->data = $xml;
return $this->send();
}
public function post($request,$xml)
{
if(!$this->headers)
{
throw new Exception("Please set Headers");
}
$this->url = $request;
$this->method = "POST";
$this->data = $xml;
return $this->send();
}
public function delete($request)
{
if(!$this->headers)
{
throw new Exception("Please set Headers");
}
$this->url = $request;
$this->method = "DELETE";
return $this->send();
}
public function setUserAgent($useragent)
{
$this->useragent = $useragent;
}
protected function send()
{
$params = array('http' => array
(
'method' => $this->method,
'content' => $this->data,
'user_agent' => $this->useragent
)
);
$headers = "";
if (!empty($this->headers) && is_array($this->headers))
{
foreach ($this->headers as $header)
{
$headers .= $header."\n";
}
}
$params['http']['header'] = $headers;
$context = stream_context_create($params);
$fp = fopen($this->url, 'r', false, $context);
if (!$fp)
{
throw new Exception("Problem with ".$this->url);
}
$response = stream_get_contents($fp);
if ($response === false)
{
throw new Exception("Problem reading data from ".$this->url);
}
return $response;
}
}
?>