Hat zwar nur indirekt mit OXID zu tun, aber da ja einige Profis hier sind, versuche ich mal mein Glück…
Ich versuche mit cURL eine Online-Bestandsabfrage zu realisieren.
Letzten Endes bedeutet das einen POST von XML-Daten an einen (passswortgeschützten) Server.
Die Verbindung selbst scheint zu funktionieren, nur retourniert mit der Server nicht die erwarteten Informationen…
Folgende Routine verwende ich für die Kommunikation:
function httpsPost($Url, $strRequest,$logit=true)
{
if ($logit)
{
$fh=fopen(strtolower(ONLINE_STOCK_REQUEST_PROVIDER).'-log.txt','a');
if ($fh)
{
$two_newline=PHP_EOL.PHP_EOL;
fwrite($fh,'***** '.date('d.m.Y, H:i:s').' Message sent to '.ONLINE_STOCK_REQUEST_URL.$two_newline);
fwrite($fh,$strRequest.$two_newline);
}
}
// Initialisation
$ch=curl_init();
if ($ch)
{
// Set parameters
$options = array(
CURLOPT_URL => $Url,
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_USERAGENT => "xxxxxxxxx", // who am i
CURLOPT_USERPWD => ONLINE_STOCK_REQUEST_CREDENTIALS, //Login data
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 60, // timeout on connect
CURLOPT_TIMEOUT => 60, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
CURLOPT_POST => 1, // i am sending post data
CURLOPT_POSTFIELDS => 'post_data='.urlencode($strRequest), // this are my post vars
CURLINFO_CONTENT_TYPE => 'text/text',
CURLOPT_SSL_VERIFYHOST => 0, // don't verify ssl
CURLOPT_SSL_VERIFYPEER => false, //
CURLOPT_VERBOSE => 1 //
);
curl_setopt_array($ch,$options);
// execute the connexion
$response = curl_exec($ch);
// Close it
// Check if any error occured
if (curl_errno($ch))
{
if ($fh)
{
fwrite($fh,$two_newline.'cURL error! ('.curl_error ($ch).RPAREN.$two_newline);
}
}
else
{
$xfer_info='';
$info = curl_getinfo($ch);
foreach ($info as $key=>$val)
{
$xfer_info.=PHP_EOL.$key.EQUAL.$val;
}
if ($fh)
{
fwrite($fh,$two_newline.'*** cURL transfer info'.$two_newline);
fwrite($fh,$xfer_info.$two_newline);
}
else
{
echo $xfer_info;
}
}
curl_close($ch);
}
else
{
$res='Failed to establish communication to "'.ONLINE_STOCK_REQUEST_PROVIDER.QUOTE.COLON_BLANK.$errstr;
if ($fh)
{
fwrite($fh,$two_newline.$res.$two_newline);
}
}
if ($response)
{
if ($fh)
{
fwrite($fh,$two_newline.'Answer received from remote service'.$two_newline.$response.$two_newline);
fwrite($fh,str_repeat('=',150).$two_newline);
}
}
if ($fh)
{
fclose($fh);
}
return $response;
}
Ich habe mir mit “curl_getinfo” die Transfer-Statistiken anzeigen lassen:
url=https://de.ep-es.com/stock_v1/atde/content.php
content_type=text/html; charset=UTF-8
http_code=200
header_size=208
request_size=289
filetime=-1
ssl_verify_result=20
redirect_count=0
total_time=0.325
namelookup_time=0.001
connect_time=0.037
pretransfer_time=0.176
size_upload=0
size_download=103
speed_download=316
speed_upload=0
download_content_length=103
upload_content_length=0
starttransfer_time=0.325
redirect_time=0
Was dabei auffällt ist, dass sowohl “size_upload”, als auch “upload_content_length” den Wert 0 haben, anscheinend also keine Daten zum Server übertragen werden, obwohl in “$strRequest” definitiv Daten enthalten sind.
Hat jemand eine Idee, was das Problem sein könnte?