Hallo zusammen,
ich versuche einen HTTP_POST an einen Webservice zu schicken.
per Fsockopen bekomme ich die Meldung:
Der Service ist nicht erreichbar.
Per CURL funktioniert es
Kann mir jemand sagen, warum das mit fsockopen nicht geht ??!!
Ich habe einen Server, bei dem Curl nicht geht, und dort müsste ich die Fsockopen Variante nehmen.
Gruß jogi
ich versuche einen HTTP_POST an einen Webservice zu schicken.
per Fsockopen bekomme ich die Meldung:
Der Service ist nicht erreichbar.
PHP-Code:
$file = "";
$fp1 = fopen("./anfrage.xml","r");
$kennung = base64_encode("user:pass");
while(!feof($fp1))
{
$file1 = fgets($fp1, 100);
$file = $file.$file1;
}
$data = "";
$fp = fsockopen("ssl://server.com",443,$errstr,$errno);
if(!$fp)
{
die();
}
else
{
$file = addslashes($file);
$data = $file;
fputs($fp, "POST /webservice/XMLServlet HTTP/1.0\r\n");
fputs($fp, "Host: server.com\r\n");
fputs($fp, "Authorization: Basic ".$kennung." \r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);
}
while(!feof($fp))
{
$fget = fgets($fp, 128);
$data .= $fget;
}
fclose($fp);
$xml_arr = explode("\r\n\r\n",$data);
echo $xml_arr[1];
PHP-Code:
$credentials = "user:pass";
$request_file = "./anfrage.xml";
$fh = fopen("./anfrage.xml","r");
while(!feof($fh))
{
$file1 = fgets($fh, 100);
$file = $file.$file1;
}
fclose($fh);
$xml_data = $file;
$url = "https://www.server.com/webservice/XMLServlet";
$page = "/webservice/XMLServlet";
$headers = array(
"POST ".$page." HTTP/1.0",
"Content-type: text/xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache",
"Pragma: no-cache",
"SOAPAction: \"run\"",
"Content-length: ".strlen($xml_data),
"Authorization: Basic " . base64_encode($credentials)
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);
$data = curl_exec($ch);
if (curl_errno($ch)) {
print "Error: " . curl_error($ch);
}
else
{
var_dump($data);
curl_close($ch);
Ich habe einen Server, bei dem Curl nicht geht, und dort müsste ich die Fsockopen Variante nehmen.
Gruß jogi
Kommentar